0

我最近开始使用 rspec 和 factory_girl,并且正在为我的项目控制器中的创建操作制定基本控制规范。

所以我有这个作为之前的过滤器:

before :each do
  @project = FactoryGirl.create(:project)
  @user = FactoryGirl.create(:user, first_name: "Jim", last_name: "Smith", username: "jsmith")
  session[:user_id] = @user.id # this maintains the session for the user created in the previous linew
end

我的项目希望有一个与之关联的用户。

所以在创建规范中,我有这个:

describe 'POST #create' do
  attribute_merge = FactoryGirl.attributes_for(:project).merge(FactoryGirl.attributes_for(:user))

  context "with valid attributes" do
    it "creates a new project" do
      expect{ 
        post :create, project: attribute_merge 
        }.to change(Project,:count).by(1)
    end
  end
end

所以我要做的是传递项目属性散列和用户属性散列,因为一个项目需要至少一个用户才能创建。现在,我得到的错误是:

ActiveModel::MassAssignmentSecurity::Error:
Can't mass-assign protected attributes: first_name, last_name....

我应该补充一点,我的创建操作在开发中完美运行,并且attr_accessible :first_name, :last_name, :username,...在我的 user.rb 文件中确实有

4

1 回答 1

0

它失败了,因为您将用户的实际属性传递给项目,而不仅仅是对用户的引用。

尝试

post :create, project: FactoryGirl.build(:project, user: user).attributes
于 2012-06-16T01:08:33.607 回答