2013-07-26 9 views
8

Ich habe ein Problem mit Integrationstest mit Ember mit Toran Billups TDD guide.Wie funktioniert der Ember-Integrationstest für Routenübergänge?

Ich verwende Karma als meinen Test Runner mit Qunit und Phantom JS.

Ich bin sicher, die Hälfte von, wenn hat mit meinem Anfänger Wissen der Glimm Runloop zu tun. Meine Frage ist 2 Teile:

1) Wie wickle ich einen vist() Test richtig in die Laufschleife ein?

2) Wie kann ich auf Übergänge testen? Die Indexroute ('/') sollte in eine Ressourcenroute namens 'projects.index' übergehen.

module("Projects Integration Test:", { 
    setup: function() { 
    Ember.run(App, App.advanceReadiness); 
    }, 
    teardown: function() { 
    App.reset(); 
    } 
}); 

test('Index Route Page', function(){ 
    expect(1); 
    App.reset();  
     visit("/").then(function(){ 
      ok(exists("*"), "Found HTML"); 
     }); 
}); 

Vielen Dank im Voraus für alle Zeiger in die richtige Richtung.

+0

Welche Version von Glut verwenden Sie? Ich habe es versäumt, einen kritischen Fehler in RC 6 zu erwähnen, der bricht, wenn Sie die "/" Route besuchen https://github.com/emberjs/ember.js/issues/2997 –

+0

Ah! Ich benutze R6.1! Entschuldigung, ich habe vergessen in meiner Frage zu erwähnen. Vielen Dank für deine Hilfe! – ganicus

Antwort

7

ich nur eine Beispielanwendung nach oben gedrückt wird, die einen einfachen Übergang macht, wenn Sie die „/“ Route mit Ember.js getroffen

RC5

https://github.com/toranb/ember-testing-example

die einfache "Hallo Welt" Beispiel sieht wie folgt aus

1.) die te mplate Sie während des Übergangs weitergeleitet

<table> 
{{#each person in controller}} 
<tr> 
    <td class="name">{{person.fullName}}</td> 
    <td><input type="submit" class="delete" value="delete" {{action deletePerson person}} /></td> 
</tr> 
{{/each}} 
</table> 

2.) den Ember.js Anwendungscode

App = Ember.Application.create(); 

App.Router.map(function() { 
    this.resource("other", { path: "/" }); 
    this.resource("people", { path: "/people" }); 
}); 

App.OtherRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('people'); 
    } 
}); 

App.PeopleRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Person.find(); 
    } 
}); 

App.Person = Ember.Object.extend({ 
    firstName: '', 
    lastName: '' 
}); 

App.Person.reopenClass({ 
    people: [], 
    find: function() { 
     var self = this; 
     $.getJSON('/api/people', function(response) { 
      response.forEach(function(hash) { 
       var person = App.Person.create(hash); 
       Ember.run(self.people, self.people.pushObject, person); 
      }); 
     }, this); 
     return this.people; 
    } 
}); 

3.) sieht der Integrationstest wie diese

module('integration tests', { 
    setup: function() { 
     App.reset(); 
     App.Person.people = []; 
    }, 
    teardown: function() { 
     $.mockjaxClear(); 
    } 
}); 

test('ajax response with 2 people yields table with 2 rows', function() { 
    var json = [{firstName: "x", lastName: "y"}, {firstName: "h", lastName: "z"}]; 
    stubEndpointForHttpRequest('/api/people', json); 
    visit("/").then(function() { 
     var rows = find("table tr").length; 
     equal(rows, 2, rows); 
    }); 
}); 

4.) Der Integrationshelfer, den ich für die meisten meiner ember.js-Projekte verwende

4

Ich bin nicht vertraut mit Karma, aber die Teile Ihres Tests, der mit Ember zu interagieren muss, sollten in die Laufschleife geschoben werden (wie Sie erwähnen wurden)

Ember.run.next(function(){ 
    //do somethin 
    transition stuff here etc 
}); 

die aktuelle Route Um zu überprüfen, können Sie Informationen aus dem Ember rausstehlen, hier sind einige Informationen, die ich irgendwann aus dem Stack-Überlauf gestohlen habe.

var router = App.__container__.lookup("router:main"); //get the main router 
var currentHandlerInfos = router.router.currentHandlerInfos; //get all handlers 
var activeHandler = currentHandlerInfos[currentHandlerInfos.length - 1]; // get active handler 
var activeRoute = activeHandler.handler; // active route 

Wenn Sie tun Controller Test zu starten, schrieb ich auf, dass einige Informationen bis http://discuss.emberjs.com/t/unit-testing-multiple-controllers-in-emberjs/1865

+0

Ember.run.next() hat meinen Test ohne Fehler ausgeführt, aber ich erhalte eine Fehlermeldung, dass keine Assertions vorhanden sind. Ich liebe das obige Beispiel über das Tippen auf die aktuelle Route, um aktuelle Informationen über Handler zu erhalten. Ich werde damit in meinen Tests definitiv herumspielen! – ganicus