我想测试由Rails UJS发起的AJAX调用。具体来说,我使用Rails UJS ajax事件来提供错误案例。
我想测试一下,但我不知道如何告诉rspec / capybara" stub"并假设错误代码
$("button").
on('ajax:error',function(event,xhr, status, error){
if(status == "timeout") {
var msg;
msg = Messenger().post({
message: "This is taking too long"
});
} else {
var msg;
msg = Messenger().post({
message: "it seems there is a bug. Please try again."
});
};
});
我想做以下事情:
describe "test returning error message", js: true do
it "should be successful" do
visit deal_page_path(deal)
first('a.button').click
stub(:xhr.status) = "timeout"
expect(page).to have_content('This is taking too long')
end
end
怎么做?
注意:ajax请求是内部的,他们不会转到第三方API或服务(例如facebook for ex)。
答案 0 :(得分:1)
使用Capybara(支持JS的驱动程序)进行测试时,除了通过浏览器创建的更改外,它无法访问请求或响应。您可以在相关控制器中构建一个可以打开和关闭的测试模式,以允许它输出您想要的错误,但最简单的方法是使用可编程代理,如puffing-billy,这将允许您可以从浏览器中有选择地返回任何给定请求的内容。有一点需要注意的是,这并不是测试应用程序是否正确返回错误,只是测试您的前端是否按预期方式处理错误。