Nach the blog-post für ember-data
Version 1.0.0-beta.16
der Speicher kann nun als Service genutzt werden:Wie kann ich den Shop als Dienst in Ember-Unit-Tests mit qunit verwenden?
TweetComposerComponent = Ember.Component.extend({
store: Ember.inject.service()
});
Allerdings habe ich nicht herausfinden kann, wie man auf einer solchen Komponente qunit
Unit-Tests zu tun. Ich habe versucht, die folgenden:
moduleForComponent('tweet-composer', {
needs: ['service:store']
});
und:
moduleForComponent('tweet-composer', {
needs: ['store:main']
});
Und wenn ich tun, um die ehemalige ich einen Fehler Attempting to register an unknown factory: 'service:store'
und wenn ich das letztere tun dann store
ist undefined
.
Gedanken?
(Ich schreibe eine Stil App).
Update:
Es scheint, gibt es eine open issue hierfür in den glühenden Kohlen-Test-Helfer Repo.
Während ich für dieses Update warte, kochte ich einen Helfer auf, die als eine Notlösung (Coffee) arbeiten können:
`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`
sind Abnahmen quälend langsam. Ich bevorzuge es, sie nur zu verwenden, wenn ich viele Aspekte der Anwendung teste. Wenn ich genau zwei Stücke teste, ist es viel sinnvoller, nur diese beiden Teile zu instantiieren und sie zusammen zu testen, aber isoliert vom Rest der App. –
Ich kenne den Thread, den Sie erwähnen, und ich schätze den Rat, aber ich bin im Lager, das glaubt, dass es bestimmte eingeschränkte, angemessene Verwendungen gibt, um den Ladenzugriff innerhalb bestimmter Komponenten zu ermöglichen.Insbesondere wenn der in der Komponente dargestellte Zustand nicht von der URL abgeleitet wird, sondern ein intrinsischer und isolierter Aspekt der Komponente, kann es sinnvoll sein, diesen Zustand in der Komponente zu isolieren und nicht alle Routen zu verschmutzen, die die Komponente kennzeichnen die Logik, die erforderlich ist, um die Modelle zu instanziieren und sie zu aktualisieren, während sich der interne Zustand der Komponente ändert. –
Einverstanden, Sie haben einen guten Punkt dort. Selbst bei dieser Art von Test (Ihrer Komponente) testen Sie die Logik der Komponente und nicht den Speicher. Es spielt also keine Rolle, woher die Daten kommen. Der Test muss sicherstellen, dass verschiedene Daten die richtigen Ereignisse auslösen und zu erwarteten Ergebnissen führen. – givanse