RSpec/Mongoid: ожидается изменение количества встроенных моделей

У меня есть две модели Mongoid: User и EmailAccounts. Последнее встроено в модель 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)

3 ответа

Решение

У меня была точно такая же проблема, и мне удалось решить ее, используя комбинацию ответов, размещенных здесь.

expect {
  #action 
}.to change { foo.reload.bars.count }.by(1)

Отредактировано с новым ответом:

Я смог использовать этот синтаксис в моей спецификации документа Mongoid:

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

Обратите внимание, что оператор count находится в скобках и не использует параметр:count.

Попробуйте следующее:

user.reload
}.to change(user.email_accounts, :count).by(1)
Другие вопросы по тегам