2016-06-11 2 views
0

У меня есть вызовы AJAX, инициированные Rails UJS, которые я хотел бы протестировать. в частности, я использовал события ajax для Rails UJS для обеспечения случаев ошибок.Stub Rails Статус ответа UJS/Ajax для проверки возвращаемого сообщения в тесте функции Rspec/Capybara

Я хотел бы, чтобы проверить их, но я не знаю, как сказать RSpec/водосвинку к «заглушки» и считать код ошибки

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

При тестировании с помощью Capybara (JS-совместимых драйверов) он не имеет доступа к запросу или отклику, за исключением изменений, которые он создает в браузере. Вы можете создать тестовый режим в своих соответствующих контроллерах, которые могут быть включены и выключены, чтобы позволить ему выводить нужные вам ошибки, но самый чистый способ сделать это, вероятно, использовать программируемый прокси-сервер, такой как puffing-billy, который позволит вам выборочно возвращать независимо от того, что вы хотите получить за любой запрос от браузера. Единственное, что нужно понять, это то, что это не тестирование, что приложение корректно возвращает ошибки, это просто проверка того, что ваш front-end обрабатывает ошибки так, как вы ожидаете.

+0

спасибо, я наткнулся на бифлон. но он больше фокусировался на http, чем на обрезке рельсов ujs ajax modal. могу я сделать это с пыхтящим билли? – Mathieu

+0

@Mathieu. Вы хотите подделать ответ статуса на запрос http, это именно то, что puffing billy позволяет делать –

+0

, он работал благодаря. – Mathieu

Смежные вопросы