1

在我的用户模型中,所有用户都userbefore_create回调中分配了角色。所以我在创建管理员用户以在某些测试中使用时遇到了很多麻烦。这是我尝试过的,但不起作用:

require 'spec_helper'

describe "Exercises" do
  describe "GET /Exercises" do
    it "gives the expected status code." do
        sign_in_as_valid_user
        @user.role = 'admin'

      get exercises_path
      response.status.should be(200)
    end

为了完整起见,这里是调用的方法:

module ValidUserRequestHelper
    def sign_in_as_valid_user
        FactoryGirl.create :program
        @user ||= FactoryGirl.create :user

        post_via_redirect user_session_path, 'user[email]' => @user.email, 'user[password]' => @user.password
    end
end

和工厂:

FactoryGirl.define do
  sequence :email do |n|
    "test#{n}@vitogo.com"
  end

  factory :user do
    email           
    password                            '12345678'
    password_confirmation '12345678'
    goal_id                             1
    experience_level_id     1
    gender                              'Female'
  end
end

我只是想在重要的特定测试中改变角色。

任何想法如何做到这一点?这让我快疯了。提前致谢!

4

2 回答 2

4

然后我编辑了我的用户工厂以创建一个从我的用户工厂继承的管理工厂,然后在after(:create)回调中分配管理员角色,如下所示:

factory :user do
    email           
    password              '12345678'
    password_confirmation '12345678'
    gender                'Male'
    factory :admin do
      after(:create) { |user| user.role = 'admin'; user.save }
    end
  end
于 2013-10-09T16:13:45.293 回答
0

尝试将方法包装@user在一个方法中,类似于 ValidUserRequestHelper

def current_user
  @user
end 

然后调用current_user.role = 'admin'你的规格

于 2013-10-09T06:21:25.063 回答