Ember用于单元测试的 JS 服务注入(Ember QUnit)
EmberJS Service Injection for Unit Tests (Ember QUnit)
规格:
- Ember版本:1.13.8
- 节点:0.10.33
- npm: 2.13.4
我有
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");
});
(使用 'alias' 作为示例,因为我不允许显示实际代码)
我已尝试初始化服务,但在 Ember Qunit 测试期间,控制器没有向其注入服务。
我试过将注入放在:init() 而不是 beforeEach,也不起作用...
如何在单元测试期间注入它?
我在调试器中设置断点以查看我的控制器是否有该服务,但在测试期间没有。但是,正常 ember 发球没问题。
您不必导入服务。您必须将服务包括在如下需求中。
moduleFor("controller:test", {
needs: ['service:alias']
});
例如:
服务 / alias.js
Em.service.extend({
name: 'john'
});
控制器/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);
});
对于此测试 运行,Ember 将生成一个包含 controller test
和 service alias
的容器。因此您可以访问带有其名称前缀的服务属性。
规格:
- Ember版本:1.13.8
- 节点:0.10.33
- npm: 2.13.4
我有
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,也不起作用...
如何在单元测试期间注入它?
我在调试器中设置断点以查看我的控制器是否有该服务,但在测试期间没有。但是,正常 ember 发球没问题。
您不必导入服务。您必须将服务包括在如下需求中。
moduleFor("controller:test", {
needs: ['service:alias']
});
例如:
服务 / alias.js
Em.service.extend({
name: 'john'
});
控制器/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);
});
对于此测试 运行,Ember 将生成一个包含 controller test
和 service alias
的容器。因此您可以访问带有其名称前缀的服务属性。