#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
не оценивается до самого конца. Итак, мои вопросы:
- Почему вызов DemoRequest.count, по-видимому, портит вызов ajax?
- Как мне на самом деле проверить, созданы ли новые объекты DemoRequest?
Спасибо!
Комментарии:
1. Включены ли у вас средства обработки транзакций (или вы используете средство очистки базы данных со стратегией, установленной на транзакцию)?
2. Нет приспособлений, используется средство очистки базы данных.