8

User と EmailAccounts の 2 つの Mongoid モデルがあります。後者は User モデルに組み込まれています。その構成は一般的に機能するため、問題ないはずです。今、次のようなユーザー編集フォームの統合テストを作成しようとしています:

describe 'Add EmailAccount' do
  it 'Adds an email account', js: true do
    user = FactoryGirl.create(:user_without_email_accounts)
    visit edit_user_path(user)
    expect{
      click_link 'New Email Account'
      within '.nested-fields' do
        fill_in 'Account Name', with: 'New Email Account'
        fill_in 'Other Field', with: 'Other Data'
      end
      click_button 'Save'
    }.to change(EmailAccount, :count).by(1)
  end
end

EmailAccount は組み込みモデルであるため、カウントの変化は常に 0 です。同様の方法で EmailAccount カウンタの変化を確認できますか? それとも別の道を行かなければなりませんか?これはどちらも機能しません:

      }.to change(user.email_accounts, :count).by(1)
4

3 に答える 3

20

私はまったく同じ問題を抱えていて、ここに投稿された回答を組み合わせて使用​​ することで解決できました。

expect {
  #action 
}.to change { foo.reload.bars.count }.by(1)
于 2013-02-05T12:22:14.137 に答える
2

新しい回答で編集:

Mongoid ドキュメントの仕様でこの構文を使用できました。

expect {
  #action
}.to change { Model.count }.by(1)

count ステートメントは括弧内にあり、:count パラメーターを使用していないことに注意してください。

于 2012-10-11T13:48:22.617 に答える
0

次のことを試してください:

user.reload
}.to change(user.email_accounts, :count).by(1)
于 2012-10-11T19:08:48.547 に答える