Ember用于单元测试的 JS 服务注入(Ember QUnit)

EmberJS Service Injection for Unit Tests (Ember QUnit)

规格:

我有

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 testservice alias 的容器。因此您可以访问带有其名称前缀的服务属性。