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

したがって、私がやろうとしているのは、プロジェクトを作成するために少なくとも1人のユーザーが必要なため、ユーザー属性ハッシュとともにプロジェクト属性ハッシュを渡すことです。今、私が得るエラーは次のとおりです。

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 に答える