2017-10-10 6 views
0

私はRails 4アプリケーションのすべてのタイプのユーザのベースとなるpersonモデルを持っています。私はadministratorモデル、workerモデル、clientモデルはすべてネストされた属性を受け入れます。ここで私はperson_idはnullにすることはできませんと言う制約を持っている私のSQLiteデータベースには私のadministratorモデルMinestestとRailsでネストされたコントローラのユニットテストを設定する方法

class Administrator < ActiveRecord::Base 
    belongs_to :person 
    accepts_nested_attributes_for :person 

    ... other model code here 
end 

です。

administrator用コントローラテストは、メッセージ」

ActiveRecord::StatementInvalid: SQLite3::ConstraintException: NOT NULL 
constraint failed: administrators.person_id: INSERT INTO "administrators" 
("created_at", "updated_at") VALUES (?, ?) 

administrators_controller_test.rb

は以下が含まれていて、私も試してみた

setup do 
    @administrator = administrators(:administrator_montgomery_burns) 
    @person = people(:person_montgomery_burns) 
end 

test "should create administrator" do 
    assert_difference('Administrator.count') do 
    post :create, 
     administrator: { 
     person_id: @administrator.person_id 
     } 
    end 
    assert_redirected_to administrator_path(assigns(:administrator)) 
end 

test "should create administrator" do 
    assert_difference('Administrator.count') do 
    post :create, 
     administrator: { 
     person: { 
      first_name: @person.first_name, 
      ... all other person attributes 
     } 
     } 
    end 

    assert_redirected_to administrator_path(assigns(:administrator)) 
end 

任意のアイデアを失敗していますこれをどうやってやるの?

答えて

0

私はそれを解決しました。私はログファイルparamsを開発モードのコントローラ(ここでは動作しています)とテストモード(存在しない)で見ました。代わりに

test "should create administrator" do 
    assert_difference('Administrator.count') do 
    post :create, 
     administrator: { 
     person: { 
      first_name: @person.first_name, 
      ... all other person attributes 
     } 
     } 
    end 

    assert_redirected_to administrator_path(assigns(:administrator)) 
end 

使用

test "should create administrator" do 
    assert_difference('Administrator.count') do 
    post :create, 
     administrator: { 
     person_attributes: { 
      first_name: @person.first_name, 
      ... all other person attributes 
     } 
     } 
    end 

    assert_redirected_to administrator_path(assigns(:administrator)) 
end 

だけperson_attributes:person:を変更します。

関連する問題