2015-07-17 13 views
5

Wir haben bereits eine App, die nur daran arbeitet, Testfälle für CI hinzuzufügen.Ember Fehler beim Testen: Sie müssen jeden Code mit asynchronen Nebenwirkungen in einem Lauf umhüllen.

Wir haben einen kleinen Code, den Login-Prozess und überprüft, was nach den möglichen Login Zuständen wie Erfolg, Fehler, ungültiges Konto Konto gesperrt usw.

so den ich versuchte, den follwing Code geschieht versucht.

visit('/login') 
    .fillIn('#identification', "testuser") 
    .fillIn('#password', "testpass") 
    .click('input[type="submit"]') 
    andThen(function(){ 
     ok(!exists('button:contains(sign in)'), '3. Login button is not displayed when authenticated'); 
     ok(exists('.dropDownMenuOptions li:contains(Logout)'), '4. Logout button is displayed when authenticated'); 
    }); 

und es gibt den folgenden Fehler in der Konsole.

Dieser Fehler tritt auf, nachdem der Klick ausgeführt wurde. da der Klick den AJAX-Aufruf zum Server macht und auf seine Antwort der Routenübergang erfolgt.

Für den Fall der erfolgreichen Anmeldung möchte ich überprüfen, ob meine Route von /login zu / geändert wurde, was ich aufgrund dieses Fehlers nicht tun kann.

Bitte vorschlagen.

Dank

+0

Könnten Sie bitte den click code hinzufügen. –

Antwort

14

In der Steuerung/Komponente, die Ihre Form Griff einreichen müssen Sie einen Satz (Beispiel) tun

save: function() { 
    this.get('model').set('name', 'foo'); 
} 

Wenn diese Arbeit in der Laufschleife (async) nach einigem Ajax getan wird Event sicher sein, es w/ember run wie so zu wickeln

save: function() { 
    Ember.run(function() { 
     this.get('model').set('name', 'foo'); 
    }); 
} 
+0

Werke. Es ist bedauerlich, dass ich jetzt Hunderte von .set() nur wickeln muss, um die Komponententests passieren zu lassen ...: ausdruckslos: –

+0

@JanWerkhoven wahrheitsgemäß isolieren Sie dies in Ihrer einzelnen Ajax-Funktion/Helfer in der App. So etwas siehst du in diesem Ajax/Versprechen-Helfer, den ich in meinen Ember-Apps verwende https://github.com/toranb/ember-promise/blob/master/addon/mixins/promise.js#L12 –

+0

was benutzt du um zu feuern Off Ajax Anfragen gerade jetzt? wenn du keine "single function/object" hast, ist es jetzt eine gute Zeit, um zu refaktorieren :) –