Метод подсчета базы данных, останавливающий вызовы ajax в rspec, capybara

#ruby-on-rails #rspec #capybara #let

#ruby-on-rails #rspec #capybara #пусть

Вопрос:

Я пытаюсь протестировать ответ AJAX в моем приложении ruby on rails. Предполагается, что пользователь может зайти на веб-сайт, отправить электронное письмо, получить сообщение, а сервер должен создать новый объект DemoRequest и отправить электронное письмо с помощью ActionMailer. Для этого я использую rpsec capybara и selenium в качестве моего webdriver. Сначала я попытался использовать

 expect { click_button submit }.to change(DemoRequest, :count).by(1)
  

но это не сработало, потому что я читал, что из-за того, что это был Ajax-запрос, испортилось время. Чтобы обойти это ограничение, я пытаюсь использовать let! объявить переменную, равную DemoRequest.count, а затем посмотреть, увеличилось ли это значение после. Однако, похоже, из-за этого запросы Ajax либо не отправляются, либо не являются ответом. Если я использую let!, даже сообщения не отображаются. Вот код.

 before { Capybara.current_driver = :selenium }
let!(:numberDemoRequest) {DemoRequest.count}
it "should be cool" do
  visit '/index.html'
  fill_in "demo_email", with: valid_address
  click_button 'Notify me' 
  should have_content('Email '   valid_address.downcase   ' saved! We'll let you know when beta is ready to begin.') 
end
specify { expect(DemoRequest.count).to eq numberDemoRequest   1}
  

пусть! не работает. То же самое, если я попытаюсь установить numberDemoRequest = DemoRequest.count где-нибудь в блоке. Если я изменю его на let , то это «работает» в том смысле, что вызовы Ajax отправляются и принимаются правильно, но тесты завершаются неудачей, потому что numberDemoRequest не оценивается до самого конца. Итак, мои вопросы:

  1. Почему вызов DemoRequest.count, по-видимому, портит вызов ajax?
  2. Как мне на самом деле проверить, созданы ли новые объекты DemoRequest?

Спасибо!

Комментарии:

1. Включены ли у вас средства обработки транзакций (или вы используете средство очистки базы данных со стратегией, установленной на транзакцию)?

2. Нет приспособлений, используется средство очистки базы данных.