Я пытаюсь проверить, что, когда пользователь нажимает на ссылку, загружается файл PDF.Как обеспечить, чтобы запрос был заполнен перед заголовками тестирования?
it 'downloads a PDF', :js do
find("a.btn", text: %r{Download}i).trigger 'click'
expect(page.response_headers['Content-Type']).to eq "application/pdf"
end
Это провал с
expected: "application/pdf"
got: "text/html; charset=utf-8"
Если добавить sleep 20
перед ожиданием, тест пройден.
Есть ли лучший/более эффективный способ написать это?
По какой-то причине, следующий проходит с перерывами (даже при более длительном ожидании):
expect(page.response_headers['Content-Type']).to have_text("application/pdf", wait: 20)
Спасибо @Thomas за то, что представил меня в wait_rspec_matchers. Очень полезно и решает проблему! Любопытно, почему вы решили удалить пользовательский метод? Казалось, что он обладает потенциалом и избегает добавления другого драгоценного камня. Разве это не действительный подход? –
@ AndyHarvey Это действительный подход, но я понял, что объясняю только часть запроса, по-прежнему нужна часть-созерцатель, у которой есть больше необходимых методов и будет слишком длинным/сложным для простого ответа. Если вы заинтересованные в этом подходе, вы должны взглянуть на классы TitleQuery и HaveTitle в Capybara в качестве хорошей отправной точки. –