Stub Rails UJS/Ajax 响应状态以测试 Rspec/Capybara 功能测试中的返回消息
Stub Rails UJS/Ajax responses status to test returning message in Rspec/Capybara feature test
我有 AJAX 个由 Rails UJS 发起的调用我想测试。具体来说,我使用 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 或服务(例如 ex 的 facebook)。
在使用 Capybara(支持 JS 的驱动程序)进行测试时,它无法访问请求或响应,除非通过它在浏览器中创建的更改。你可以在你的相关控制器中构建一个测试模式,可以打开和关闭它以允许它输出你想要的错误,但最干净的方法可能是使用像 puffing-billy 这样的可编程代理,这将允许你有选择地 return 任何你想要的来自浏览器的任何给定请求。需要意识到的一件事是,这并没有正确测试该应用程序 return 的错误,它只是测试您的前端是否按照您期望的方式处理错误。
我有 AJAX 个由 Rails UJS 发起的调用我想测试。具体来说,我使用 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 或服务(例如 ex 的 facebook)。
在使用 Capybara(支持 JS 的驱动程序)进行测试时,它无法访问请求或响应,除非通过它在浏览器中创建的更改。你可以在你的相关控制器中构建一个测试模式,可以打开和关闭它以允许它输出你想要的错误,但最干净的方法可能是使用像 puffing-billy 这样的可编程代理,这将允许你有选择地 return 任何你想要的来自浏览器的任何给定请求。需要意识到的一件事是,这并没有正确测试该应用程序 return 的错误,它只是测试您的前端是否按照您期望的方式处理错误。