Według the blog-post dla ember-data
wersji 1.0.0-beta.16
sklepu mogą być teraz używane jako usługa:Jak mogę polegać na sklepie jako usłudze w testach jednostkowych Ember przy użyciu qunit?
TweetComposerComponent = Ember.Component.extend({
store: Ember.inject.service()
});
Jednak nie mogę dowiedzieć się, jak to zrobić qunit
testy jednostkowe na takiego składnika. Próbowałem następujące:
moduleForComponent('tweet-composer', {
needs: ['service:store']
});
oraz:
moduleForComponent('tweet-composer', {
needs: ['store:main']
});
I kiedy zrobić byłego pojawia się błąd Attempting to register an unknown factory: 'service:store'
i jeśli robię ten ostatni następnie store
jest undefined
.
Myśli?
(Piszę aplikację w stylu w stylu ember-cli
).
Aktualizacja:
Wydaje Jest takie open issue za to w repo Ember-test-pomocników.
A ja czekam na ten problem, ja gotowane pomocnika, który może pracować jako środek stop-gap (coffeescript):
`import TestModuleForComponent from 'ember-test-helpers/test-module-for-component'`
`import { createModule } from 'ember-qunit/qunit-module'`
# This assumes the last argument, the callbacks, is present, although it
# does support the description being an optional argument.
moduleForStoreComponent = ->
args = Array.prototype.slice.call arguments
callbacks = args[args.length-1]
# Wrap the original beforeEach callback in a modified version that
# also sets up the store for the test container.
originalSetup = callbacks.beforeEach
callbacks.beforeEach = ->
DS._setupContainer(@container)
originalSetup.call(@) if originalSetup
callbacks.store = ->
@container.lookup('store:main')
args.unshift TestModuleForComponent
createModule.apply @, args
`export default moduleForStoreComponent`
Testy akceptacyjne są nieznośnie wolno. Wolę używać ich tylko wtedy, gdy testuję wiele aspektów aplikacji. Jeśli testuję dokładnie dwie części, to ma sens tylko tworzenie tych dwóch elementów i testowanie ich razem, ale w oderwaniu od reszty aplikacji. –
Jestem świadomy wątku, o którym wspomniałeś, i doceniam tę radę, ale jestem w obozie, który odczuwa pewne ograniczone, odpowiednie zastosowania, aby umożliwić dostęp do sklepu wewnątrz pewnych komponentów.W szczególności, gdy stan reprezentowany w komponencie nie pochodzi z adresu URL, ale raczej wewnętrzny i izolowany aspekt komponentu, może mieć sens izolowanie tego stanu w komponencie i nie zanieczyszczanie wszystkich tras zawierających element z logika wymagana do utworzenia instancji modeli i zaktualizowania ich jako stanu wewnętrznego względem zmian komponentów. –
Uzgodnione, masz dobry punkt. Nawet wtedy, w tym typie testu (twój komponent), to, co testujesz, to logika komponentu, a nie sklep. Więc tak naprawdę nie ma znaczenia, skąd pochodzą dane. To, co test musi zrobić, to sprawdzenie, czy różne elementy danych wyzwalają prawidłowe zdarzenia i powodują oczekiwane wyniki. – givanse