2013-09-05 11 views
7

Da Ember erreicht 1.0.0 vor kurzem, ich benutze es mit den Tests beginnen wollte. Ich benutze Yeoman 1.0 mit Karma. Ich möchte Testmodelle modellieren, aber ich finde es sehr schwierig, Isolation zu erreichen.Unit-Tests in Ember.js

Das Beispiel, das ich jetzt habe, ist:

describe("Expense", function() { 
    return it("has a computed property called `explained`", function() { 
    var expense = App.Expense.create({ 
     name: "My first expense", 
     value: 34 
    }); 
    return expect(expense.get("explained")).to.equal("My first expense -- 34"); 
    }); 
}); 

Ab 1.0.0, bekomme ich folgende Fehlermeldung:

Error: You should not call `create` on a model. Instead, call 
`store.createRecord` with the attributes you would like to set. 

Wie soll ich Zugriff speichern, um eine Modellinstanz zu schaffen? Idealer, wie kann ich einfach Modelle wie diese spawnen, ohne auch nur auf den Laden zurückgreifen zu müssen, ist das machbar? Es macht keinen Sinn, eine ganze App zu erstellen, nur um ein Modell, IMO, zu testen.

Vielen Dank.

+1

Das einzige Ich kann mir vorstellen, den Laden über App .__ Container __. lookup ('store: main') zu suchen. Vielleicht können Sie auch einen Blick darauf werfen, wie sie es in Ember-Daten machen DS.Model Tests –

+0

Für diejenigen, die eine Antwort suchen, funktioniert dieser Hack. Markieren Sie es als gelöst. – josemota

Antwort

2

Laut @ sly7_7 Kommentar, der Suche nach dem Laden in der App über App.__container__.lookup('store:main') funktioniert.

+0

Für diese Art von Dingen, ich hoffe immer einen Rat eines Kernteammitglied zu haben ... aber immerhin ist dies Tests, nicht die Produktion Code, so würde ich denke, das ist genug –

0

Sie sollten this.get ('Store'). Create ('Kosten')

Es sieht aus wie Sie verwenden Ember-Data 1.0.0 Beta verwenden, die die Art und Weise verändert die Dinge funktionieren. Sie sollten sich die Datei migration.md im ember-data-Projekt ansehen.

(Sorry, ich sollte Ihre Frage ein bisschen besser hätte - ich im Moment das gleiche Problem habe und die vorgeschlagenen Behälter Lösung funktioniert nicht für mich - was Browser zum Absturz zu bringen) :(

+0

gut ist dies Seit schreiben, ich habe entdeckt, dass diese Lösung tatsächlich * funktioniert * für mich, es ist nur, dass es innerhalb der Setup-Funktion der Qunn-Test ausgeführt werden muss. –

4

Hier ist der minimale Code, die ich bisher für Unit-Tests Modelle verwendet habe.

var container, store, expense; 

container = new Ember.Container(); 
container.register('store:main', DS.Store.extend()); 
container.register('model:expense', App.Expense); 
store = container.lookup('store:main'); 

Ember.run(function() { 
    expense = store.createRecord('expense', { 
    name: "My first expense", 
    value: 34 
    }); 
}); 

Basierend auf dem Code des Ladens und the way models are tested inside Ember Data, ich glaube nicht, dass Sie das Setup des Tests zu reduzieren.