我正在尝试从其中一个测试中将一个模块包含在我的应用中。甚至可以这样做吗?我只能在'tests'目录中包含一个模块。 我一直得到臭名昭着的“找不到模块”错误。
http://localhost:4200/assets/test-support.js:5578:16: Could not find module d3graph/app/controllers/index imported from d3graph/tests/unit/utils/graph-helper-test
这是我的测试代码:
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
import helper from '../../../app/anything/anywhere'; // <- THIS LINE FAILS
moduleFor('util:graph-helper', 'Graph Helper', {
beforeEach: () => initialize()
});
function initialize() { /* something */ };
test('test desc', function(assert) {
var testObj = this.subject();
// test logic follows
});
我确实尝试了对模块路径的各种修改,包括来自root的绝对路径,我甚至尝试过'require()',但是唉没有成功。 请帮忙。
答案 0 :(得分:6)
应该不是问题。您需要在needs
电话中添加moduleFor
行:
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
moduleFor('util:graph-helper', 'Graph Helper', {
needs: ['controller:index'],
beforeEach: () => initialize()
});
function initialize() { /* something */ };
test('test desc', function(assert) {
var testObj = this.subject();
// test logic follows
});
有关needs
的详细信息,请参阅http://guides.emberjs.com/v1.10.0/testing/testing-controllers/#toc_testing-controller-needs。
忽略上述信息......这是解决标准方式的Ember模块。要在模糊的Ember路径中包含模块,只需简单的ES6导入即可(此示例演示了some-util
单元测试的controller:index
:
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
import SomeUsefulUtil from '<application-name>/utils/some-useful-util';
moduleFor('controller:index', 'Graph Helper', {
beforeEach: () => initialize()
});
function initialize() { /* something */ };
test('test desc', function(assert) {
var testObj = this.subject();
// Create utility class instance
var someUsefulUtilInstance = new SomeUsefulUtil();
// test logic follows
});
这可能是非直观的部分,您必须在导入前添加应用程序的名称而不是标准的app
目录。