Ember-CLI测试不能包含'app'目录中的模块

时间:2015-04-23 19:07:23

标签: ember.js ember-cli ecmascript-6

我正在尝试从其中一个测试中将一个模块包含在我的应用中。甚至可以这样做吗?我只能在'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()',但是唉没有成功。 请帮忙。

1 个答案:

答案 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目录。