【问题标题】:Stub Rails UJS/Ajax responses status to test returning message in Rspec/Capybara feature testStub Rails UJS/Ajax 响应状态以测试 Rspec/Capybara 功能测试中的返回消息
【发布时间】:2016-06-11 15:20:14
【问题描述】:

我想要测试由 Rails UJS 发起的 AJAX 调用。具体来说,我使用 Rails UJS ajax 事件来提供错误情况。

我想测试它们,但我不知道如何告诉 rspec/capybara “存根”并假设错误代码

$("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)。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我偶然发现了 puffung billy。但它似乎更关注http而不是存根rails ujs ajax modal。我可以用膨化比利做吗?
    • @Mathieu。您正在寻找伪造对 http 请求的状态响应,这正是 puffing billy 让您做的事情
    猜你喜欢
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多