Stub Rails UJS / Ajax响应状态以测试Rspec / Capybara特征测试

时间:2016-06-11 15:20:15

标签: ruby-on-rails ruby-on-rails-4 rspec capybara ujs

我想测试由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)。

1 个答案:

答案 0 :(得分:1)

使用Capybara(支持JS的驱动程序)进行测试时,除了通过浏览器创建的更改外,它无法访问请求或响应。您可以在相关控制器中构建一个可以打开和关闭的测试模式,以允许它输出您想要的错误,但最简单的方法是使用可编程代理,如puffing-billy,这将允许您可以从浏览器中有选择地返回任何给定请求的内容。有一点需要注意的是,这并不是测试应用程序是否正确返回错误,只是测试您的前端是否按预期方式处理错误。