问题
Specs:
- Ember version: 1.13.8
- node: 0.10.33
- npm: 2.13.4
I have
import Alias from "../../../services/alias";
....
moduleFor("controller:test", "Controller: test", {
integration: true,
beforeEach: function() {
this.register('service:alias', Alias, {singleton: true});
this.inject.service('alias', { as: 'alias' });
this.advanceReadiness();
},
});
...
test('Alias Alias Alias ', function(assert) {
var controller = this.subject();
//sample function
controller.send("test");
assert.equal(true, controller.alias.get("alias"), "alias should be true");
});
I've tried to initialize the service but during Ember Qunit tests, controllers do not have the services injected to them.
I've tried putting the injection in: init() instead of beforeEach, doesn't work either...
How do I inject it during unit tests?
I put break points in the debugger to see if my controllers have the service, it doesn't during tests. It's fine on normal ember serve, however.
回答1:
You don't have to import service. You have to include service in needs like below.
moduleFor("controller:test", {
needs: ['service:alias']
});
For eg:
service / alias.js
Em.service.extend({
name: 'john'
});
controllers / test.js
Em.Controller.extend({
alias: Em.service.inject(),
test: function() {
alert(this.get('alias.name');
}
});
tests/unit/controllers/test-test.js
moduleFor('controller:test', {
needs: ['service:store']
});
test('Alias Alias Alias', function(assert) {
var controller = this.subject();
assert.equal(controller.get('store.name'), 'john);
});
For this test to run, Ember will generate a container with the controller test
and service alias
. So you can access the service properties with its name prefixed.
来源:https://stackoverflow.com/questions/34125165/emberjs-service-injection-for-unit-tests-ember-qunit