2015-10-01 7 views
7

Buduję stosunkowo prosty komponent comment-list. Chcę przekazać w komentarzu modelu (powiedzmy Post) i mieć komponent dbać o tworzenie, edytowanie, usuwanie komentarzy. Teraz omijam wszystkie różne działania i to jest bardzo kruche.Ember.js: Jak integrować komponenty testowe, które współdziałają z modelami danych ember

Jak utworzyć prawdziwe wystąpienie modelu danych Ember w teście integracji komponentów?

Moja najbliższa myślą było importować model następnie .create({}) go jednak, że błędy z use this.store.createRecord() instead

/* jshint expr:true */ 
import { assert } from 'chai'; 
import { describeComponent, it } from 'ember-mocha'; 
import hbs from 'htmlbars-inline-precompile'; 
import Post from 'ownersup-client/post/model'; 

describeComponent('comment-list', 'Integration: CommentListComponent', { 
    integration: true 
    }, 
    function() { 
    it('renders all of the comments', function() { 
     const model = Post.create({ title: 'title' }); 
     model.get('comments').createRecord({ body: 'One Comment' }) 

     this.render(hbs`{{comment-list model=model}}`); 

     assert.lengthOf(this.$('.comment-list-item'), 1); 
    }); 
    } 
); 

ktoś ma jakieś przemyślenia?

Odpowiedz

5

Nowe wydanie ember mocha 0.8.4 zawiera nowy, publiczny sposób na wstrzykiwanie usług, takich jak sklep. Jest sekcja przewodników wkrótce na przykładzie (patrz https://github.com/emberjs/guides/blob/master/source/testing/testing-components.md)

zasadniczo w beforeEach chcesz dodać następujący wiersz: this.inject.service('store');, dzięki czemu sklep dostępny jako this.get('store') w swoich badaniach.

Oto link do wniosku łóżkiem dla nowej zmiany: https://github.com/switchfly/ember-test-helpers/pull/105

+1

** this.inject.service ('store'); niech model = this.get ('sklep'). CreateRecord ('fo'); ** właśnie zgłasza błąd dla mnie – SuperUberDuper

7

Spośród wszystkich narzędzi do testowania Ember, sklep jest dostępny tylko pod numerem moduleForModel.

Oto jak ten test pomocnik robi (source):

var container = this.container; 
    var store = container.lookup('service:store') || container.lookup('store:main'); 

Można zrobić to samo wewnątrz testu. Możesz również umieścić go w programie pomocniczym, aby nie trzeba było często kopiować i wklejać.

Należy pamiętać, że działa on tylko w przypadku testu integracji. Każdy test można włączyć do integracji, uruchamiając aplikację za pomocą pomocnika testowego startApp, który jest dołączony do zestawu danych Ember CLI.

Powiązane problemy