https://github.com/stefanpenner/ember-cli/issues/2421
ember cli:1.2
我有一个样板插件项目,它有一个标题案例助手,如下所示:
我的助手app/helpers/title-case.js
import Ember from 'ember';
export default Ember.Handlebars.makeBoundHelper(function(string) {
if (typeof string === 'string') {
//replace dashes with spaces
var str = string.dasherize().replace(/-/g, ' ');
return str.replace(/wS*/g, function(word){
return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
});
} else {
return string;
}
});
I使用ember-cli 为助手生成测试
ember g helper-test title-case
这就是输出:
import {
titleCase
} from 'boilerplate/helpers/title-case';
module('TitleCaseHelper');
// Replace this with your real tests.
test('it works', function() {
var result = titleCase(42);
ok(result);
});
现在从ember-cli 运行测试
ember test
得到以下错误:
Build failed.
File: dummy/tests/unit/helpers/title-case-test.js
ENOENT, no such file or directory '/home/me/git/ember/boilerplate/tmp/tree_merger-tmp_dest_dir-PL6HFkuw.tmp/boilerplate/helpers/title-case.js'
Error: ENOENT, no such file or directory '/home/me/git/ember/boilerplate/tmp/tree_merger-tmp_dest_dir-PL6HFkuw.tmp/boilerplate/helpers/title-case.js'
更新
我尝试将以下内容更改为"dummy",而不是自动生成的"样板文件",并删除了花括号。
//import {
// titleCase
//} from 'dummy/helpers/title-case';
import titleCase from 'dummy/helpers/title-case';
它现在进一步进入测试方法,但在使用调用titleCase(42)
时失败
TypeError: Cannot read property 'isUnbound' of undefined
更新#2
我能够做到这一点,但这很糟糕,我需要访问._rawFunction
属性并更改导入语句的格式。
import titleCaseHelper from 'dummy/helpers/title-case';
var titleCase = titleCaseHelper._rawFunction;
module('TitleCaseHelper');
test('Title case lower case letters', function() {
var result = titleCase('hello world');
equal(result, 'Hello World');
});
我仍然困惑于为什么ember-cli最初生成的测试不起作用。
助手测试生成器希望助手文件具有特殊格式,如果您生成助手,您可以看到该格式:
ember generate helper hello
这将生成文件app/helpers/hello.js,其中包含
import Ember from 'ember';
export function hello(input) {
return input;
};
export default Ember.Handlebars.makeBoundHelper(hello);
它还将在tests/unit/helpers/hello-test.js中使用为上面的内容生成一个单元测试
import {
hello
} from 'ember-empty/helpers/hello';
module('HelloHelper');
// Replace this with your real tests.
test('it works', function() {
var result = hello(42);
ok(result);
});
换句话说,除了绑定的助手之外,助手测试生成器还希望您导出原始函数本身。