规格:
我有
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");
});
我尝试初始化服务,但在Ember Qunit测试期间,控制器没有注入服务。
我已尝试将注入放入:init()而不是beforeEach,也不起作用...
如何在单元测试期间注入它?
我在调试器中放置了断点以查看我的控制器是否具有该服务,在测试期间它没有。然而,在普通的余烬服务上这很好。
答案 0 :(得分:9)
您不必导入服务。您必须在以下需求中包含服务。
moduleFor("controller:test", {
needs: ['service:alias']
});
例如:
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');
}
});
测试/单元/控制器/测试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);
});
要运行此测试,Ember将生成一个包含controller test
和service alias
的容器。因此,您可以访问名称前缀的服务属性。