0

会社とユーザーの2つのモデルがあります。会社には多くのユーザーがいて、ユーザーは会社に属しています。ネストされたフォームを作成しました: サインアップ時に、会社と最初のユーザーを作成する必要があります。

フォームは魅力のように機能しますが、これのテストを書く方法がよくわかりません。scaffold によって生成された機能テストは次のとおりです。

test "should create company" do
  assert_difference('Company.count') do
    post :create, company: { city: @company.city, name: @company.name}
  end
  assert_redirected_to company_path(assigns(:company))
end

そして、ここでユーザーの作成をテストするために私がしたこと:

test "should create company and first user" do
  assert_difference('Company.count') do
    assert_difference('User.count') do
      post :create, company: { city: @company.city, name: @company.name}, user: {name: @user.name, email: @user.email}
    end
  end
  assert_redirected_to company_path(assigns(:company))
end

テストを実行すると、次のエラーが発生します。

1) Failure:
test_should_create_company_and_first_user(CompaniesControllerTest) [test/functional/companies_controller_test.rb:21]:
"User.count" didn't change by 1.
<3> expected but was
<2>.

インターネットでヘルプが見つからなかったので、ここの誰かができることを願っています:)

4

2 に答える 2

2

フォームが実際にネストされている場合は、次のように、テスト リクエストの会社オブジェクト内にユーザー オブジェクトを含める必要があります。

post :create, company: { city: @company.city, name: @company.name, user: {name: @user.name, email: @user.email} }
于 2013-02-25T00:21:32.950 に答える
0

解決

会社のモデル

attr_accessible :city, :name, :users_attributes
has_many :users
accepts_nested_attributes_for :users

ユーザーモデル

attr_accessible :email, :name
belongs_to :company

会社のコントローラーテスト

test "should create company and first user" do
  assert_difference('Company.count') do
    assert_difference('User.count') do
      post :create, company: { 
        city: @company.city, 
        name: @company.name, 
        users_attributes: {
          user: {name: @user.name, email: @user.email}, 
          user: {name: @user.name, email: @user.email}
        }
      }
    end
  end
  assert_redirected_to company_path(assigns(:company))
end

users_attributes 内の 1 人以上のユーザーでテストできます。

助けてくれてありがとう@drewinglis :D

于 2014-04-09T03:58:44.550 に答える