0
我想测试一下,当用户点击一个链接时,下载一个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向我介绍waiting_rspec_matchers。非常有用并解决了这个问题!好奇你为什么决定删除自定义方法?这看起来像它有潜力,并避免增加另一个宝石。这不是一个有效的方法吗? –
@AndyHarvey这是一个有效的方法,但我意识到我只是在解释查询部分,仍然需要匹配器部分,它需要更多的方法,并且对于一个简单的答案来说太长/很复杂 - 如果你对这种方法感兴趣,你应该看看Capybara中的TitleQuery和HaveTitle类作为一个很好的起点。 –