2014-09-06 6 views
5

Es scheint, dass store ist nicht verfügbar in meinem Ember-Tests, ob im Zusammenhang mit einem ObjectController oder innerhalb einer Einheit Tests. My Unit-Test:Ember Testing: Kann die Eigenschaft 'createRecord' von null nicht lesen

`import {test, moduleFor} from "ember-qunit"` 
`import DS from "ember-data"` 

moduleFor "controller:register", "RegisterController", { 
} 

test "store is working", -> 
    expect 1 
    controller = @subject() 
    Ember.run(-> 
     sampleUser = controller.get("store").createRecord("user", { 
      username: "myuser" 
      password: "otherpassword" 
     }) 
     ok(sampleUser instanceof DS.Model) 
    ) 

Der Test geben:

Gestorben am Test # 1 bei Test (http://localhost:4200/assets/vendor.js:73539:13) bei eval (app/Tests/Einheit/controllers/register test.js 19: 5) bei requireModule (http://localhost:4200/assets/vendor.js:54:29) bei http://localhost:4200/assets/test-loader.js:14:29: Kann nicht Eigentum 'create' von null

lesen Kann jemand erklären, w Ich bin nicht in der Lage, auf DS Fähigkeiten entweder innerhalb meiner Tests oder von innerhalb des Kontrollers selbst zuzugreifen (wenn Tests laufen)?

+0

Können Sie eine Instanz des Geschäfts manuell erstellen - dann injizieren Sie das/fügen Sie es Ihrem Controller (im Test) hinzu, um zu überprüfen, ob dies wie erwartet funktioniert? –

Antwort

1

Da ember-qunit den Speicher nicht in Ihre Controller einspeist, ist er für Komponententests gedacht, nicht für Integrationstests. Und der Speicher von Ember Data liegt außerhalb des Bereichs dieses Controllers.

+0

Ok, wie repariere ich dann? – user1429980

+0

Was wollen Sie hier testen? Glimmdaten? Ich würde die Komponententests in das Framework von Ember Data anstatt in Ihr hinzufügen. Es entspricht dem Testen von jQuery. – Kingpin2k

+0

https://github.com/emberjs/data/blob/master/packages/ember-data/tests/unit/store/create_record_test.js – Kingpin2k

0

Sie können den Glutdatenspeicher zum Abschnitt "Bedürfnisse" des Komponententests hinzufügen. Sie werden auch wie so alle Modelle werden auf die „Bedürfnisse“ erstellt hinzufügen müssen:

needs: ['service:store', 'model:user'] 

Das wird eine echte Instanz des Ladens in das Objekt (Controller, Komponente, Route, etc.) injizieren getestet .