2016-06-11 13 views
0

Ich habe AJAX Anrufe von Rails UJS initiiert, die ich gerne testen würde. Insbesondere habe ich Rails UJS ajax-Ereignisse verwendet, um Fehler zu vermeiden.Stub Rails UJS/Ajax Antworten Status zu testen Antwort in Rspec/Capybara Feature-Test

Ich möchte sie testen, aber ich weiß nicht, wie rspec/Capybara sagen, „Stummel“ und übernehmen den Fehlercode

$("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." 
      }); 
      }; 
     }); 

Ich mag würde so etwas wie die folgenden Funktionen ausführen:

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 

Wie geht das?

Hinweis: Die Ajax-Anfragen sind intern, sie gehen nicht an API oder Dienste Dritter (wie Facebook für Ex).

Antwort

1

Beim Testen mit Capybara (JS-fähige Treiber) hat es keinen Zugriff auf die Anfrage oder Antwort, außer durch die Änderungen, die es im Browser erstellt. Sie könnten einen Testmodus für Ihre relevanten Controller erstellen, der ein- und ausgeschaltet werden kann, damit er die gewünschten Fehler ausgeben kann. Am saubersten ist es jedoch, einen programmierbaren Proxy wie puffing-billy zu verwenden, mit dem Sie selektiv zurückkehren können was immer Sie für eine bestimmte Anfrage aus dem Browser möchten. Eine Sache zu realisieren ist, dass dies nicht testet, dass App Fehler korrekt zurückgibt, es testet nur, dass Ihr Front-End Fehler wie erwartet behandelt.

+0

danke, ich war über puffung billy gestolpert. aber es schien mehr Fokus auf http als stubbing eine Schiene Ujs Ajax Modal. Kann ich das mit puffendem billy machen? – Mathieu

+0

@Mathieu. Sie möchten die Statusantwort auf eine http-Anfrage vortäuschen, das ist genau das, was Sie mit puffing billy erreichen können –

+0

es hat funktioniert. – Mathieu