FactoryGirl:调用FactoryGirl.create后更改属性

时间:2013-10-09 04:27:28

标签: ruby-on-rails rspec factory-bot

在我的用户模型中,所有用户都在user回调中被分配了before_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

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

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

2 个答案:

答案 0 :(得分:3)

然后我编辑了我的用户工厂以创建从我的用户工厂继承的管理工厂,然后在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

答案 1 :(得分:0)

尝试将@user包装在方法中,如ValidUserRequestHelper

def current_user
  @user
end 

然后在您的规范中调用current_user.role = 'admin'