2013-09-05 23 views
7

Dato che Ember ha raggiunto 1.0.0 recentemente, volevo iniziare a usarlo con i test. Sto usando Yeoman 1.0 con Karma. Voglio modelli di test unitari ma trovo molto difficile realizzare l'isolamento.Test unitario in Ember.js

L'esempio che ho ora è:

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

A partire dal 1.0.0, ottengo il seguente errore:

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

Come devo accedere negozio al fine di creare un'istanza di modello? Più idealmente, come posso semplicemente generare modelli come questo senza nemmeno ricorrere al negozio, è fattibile? Non ha senso creare l'intera app solo per testare un modello, IMO.

Grazie.

+1

L'unico il modo in cui posso pensare è quello di cercare il negozio tramite l'app .__ container __. lookup ('store: main'). Forse si può anche dare un'occhiata a come lo fanno in ember-data DS.Model test –

+0

Per coloro che cercano una risposta, questo hack funziona. Contrassegnarlo come risolto. – josemota

risposta

2

In base al commento di @ sly7_7, cercare il negozio all'interno dell'applicazione tramite App.__container__.lookup('store:main') opere.

+0

Per quel genere di cose, spero sempre di avere un consiglio di un membro del team principale ... ma dopo tutto, questo è test, non codice di produzione, quindi penso che questo sia abbastanza buono –

0

si dovrebbe usare this.get ('store'). CreateRecord ('spese')

Sembra che si sta utilizzando Ember-Data 1.0.0 beta, che ha cambiato il modo in cui funzionano le cose. Dovresti dare un'occhiata al file migration.md nel progetto ember-data.

(Scusate avrei dovuto leggere la tua domanda un po 'meglio - Sto avendo lo stesso problema in questo momento e il suggerito contenitore soluzione non funziona per me - causando browser per mandare in crash) :(

+0

Da quando ho scritto questo, ho ho scoperto che questa soluzione in realtà * funziona * per me, è solo che deve essere eseguito all'interno della funzione di configurazione del test della qunit. –

4

Ecco il codice minimo che ho usato finora per i modelli di unit test.

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 
    }); 
}); 

in base al codice del negozio e the way models are tested inside Ember Data, non credo che è possibile ridurre l'impostazione del test.