2013-09-05 17 views
7

Po tym, jak Ember dotarł do 1.0.0, chciałem zacząć używać go z testami. Używam Yeoman 1.0 z Karmą. Chcę testować modele jednostkowe, ale bardzo trudno jest osiągnąć izolację.Testowanie jednostek w Ember.js

Przykład mam teraz jest:

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

Od 1.0.0, pojawia się następujący błąd:

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

Jak mam dostępu do sklepu w celu utworzenia instancji modelu? Bardziej optymalnie, jak mogę po prostu odradzać takie modele, nawet bez uciekania się do sklepu, czy to opłacalne? Nie ma sensu wystawiać całej aplikacji tylko po to, aby przetestować model, IMO.

Dziękuję.

+1

Tylko sposób, w jaki mogę pomyśleć to sprawdzenie sklepu za pośrednictwem App .__ container __. lookup ("store: main"). Być może możesz również rzucić okiem na to, jak robią to w ember danych DS.Model testuje –

+0

Dla tych, którzy szukają odpowiedzi, ten hack działa. Oznaczenie jako rozwiązane. – josemota

Odpowiedz

2

Zgodnie z komentarzem @ sly7_7, szukanie sklepu wewnątrz aplikacji poprzez App.__container__.lookup('store:main') działa.

+0

Dla tego rodzaju rzeczy, zawsze mam nadzieję, że otrzymam radę od członka zespołu podstawowego ... ale w końcu to są testy, a nie kod produkcyjny, więc myślę, że to wystarczy –

0

Należy użyć this.get ('sklep'). CreateRecord ('wydatków')

Wygląda na to, że używasz Ember-DATA 1.0.0 beta, które zmieniły sposób pracy. Powinieneś rzucić okiem na plik migration.md w projekcie ember-data.

(Niestety powinny Znam swoje pytanie nieco lepiej - Mam ten sam problem w tej chwili i pojemnik rozwiązanie zaproponował nie działa dla mnie - powodując przeglądarek do katastrofie) :(

+0

Od napisania tego mam odkryłem, że to rozwiązanie faktycznie * działa * dla mnie, po prostu musi być uruchomione wewnątrz funkcji konfiguracji testu qunit. –

4

Oto minimalny kod, który używałem do tej pory dla modeli testowych jednostka.

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

podstawie kodu sklepu i the way models are tested inside Ember Data, nie sądzę, że można zmniejszyć konfiguracji testu.