2016-06-11 1 views
0

Rails UJS에서 시작한 AJAX 호출을 테스트하고 싶습니다. 특히, 레일스의 UJS 아약스 이벤트를 사용하여 오류의 경우를 제공했습니다.Stub 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." 
      }); 
      }; 
     }); 

오류 코드 RSpec에/카피 바라가 "그루터기"를 이야기하는 방법을 알고 생각하지 않습니다

에게
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 요청은 제 3 자 API 또는 서비스 (예 : facebook과 같은)로 이동하지 않는 내부 요청입니다.

답변

1

Capybara (JS 지원 드라이버)를 사용하여 테스트 할 때 브라우저에서 변경 한 사항을 제외하고는 요청이나 응답에 액세스 할 수 없습니다. 당신은 당신이 원하는 오류를 출력 할 수 있도록 켜고 끌 수있는 관련 컨트롤러에 테스트 모드를 구축 할 수 있습니다. 그러나 이것을 수행하는 가장 깨끗한 방법은 아마도 puffing-billy과 같은 프로그래머블 프록시를 사용하는 것입니다. 브라우저의 요청에 대해 무엇을 원 하든지간에 한 가지 알아야 할 점은이 앱이 오류를 올바르게 반환하는지 테스트하는 것이 아니라 프런트 엔드가 예상 한대로 오류를 처리하는지 테스트하는 것입니다.

+0

덕분에, 나는 빌어 먹을 puffung을 만났습니다. 하지만 그것은 레일 ujs 아약스 모달을 stubbing보다 http에 더 많은 초점을 보였다. 빌리와 함께 할 수 있을까요? – Mathieu

+0

@ 마티유. HTTP 요청에 대한 상태 응답을 위조하려고합니다. 정확하게 빌어 먹을 빌리로하면 –

+0

덕분에 성공했습니다. – Mathieu