【发布时间】:2015-06-07 14:41:46
【问题描述】:
我有一个非常简单的 yeoman 生成器 watchjs,它有 speaker 子生成器。下面是它的用途:
$ yo watchjs:speaker
You called the watch.js speaker subgenerator.
? Speaker file: data/speakers/speakers.json
? Speaker name: abc
{ file: 'data/speakers/speakers.json', name: 'abc' }
Generated slug is: abc
Trying to add: {
"id": "abc",
"name": "abc"
}
主要有两个提示:file - 定义应附加数据的json文件和name - 定义要添加到文件中的实际数据(稍作修改)。我正在尝试为此编写一个简单的 yeoman 测试。我一直在尝试关注the docs,但我一直都失败了:
$ npm test
> generator-watchjs@0.0.2 test c:\Users\tomasz.ducin\Documents\GitHub\generator-watchjs
> mocha
Watchjs:speaker
{ file: 'speakers.json', name: 'John Doe' } // <- this is my console.log
1) "before all" hook
0 passing (59ms)
1 failing
1) Watchjs:speaker "before all" hook:
Uncaught Error: ENOENT, no such file or directory 'C:\Users\TOMASZ~1.DUC\AppData\Local\Temp\53dac48785ddecb6dabba402eeb04f91e322f844\speakers.json'
at Object.fs.openSync (fs.js:439:18)
at Object.fs.readFileSync (fs.js:290:15)
at module.exports.yeoman.generators.Base.extend.writing (c:\Users\tomasz.ducin\Documents\GitHub\generator-watchjs\speaker\index.js:43:33)
npm ERR! Test failed. See above for more details.
我无法理解实际创建的文件在哪里以及在哪里寻找它的测试...似乎使用了一个临时的 windows 位置,但无论如何,如果所有东西都相对于路径正常工作,则文件应该已经找到了,但没有。无法弄清楚如何才能使测试通过。
我的测试文件最好的内容是:
'use strict';
var path = require('path');
var assert = require('yeoman-generator').assert;
var helpers = require('yeoman-generator').test;
describe('watchjs:speaker', function () {
before(function (done) {
helpers.run(path.join(__dirname, '../speaker'))
.withOptions({ 'skip-install': true })
.withPrompts({ 'file': 'speakers.json', 'name': "John Doe" })
.on('end', done);
});
it('creates files', function () {
assert.file([
'speakers.json'
]);
});
});
我通过提示传递了一个特定的 name 和 file 名称。
我发现 npm test 调用 package.json 的 mocha 命令(仅此而已)。但我不是摩卡专家。
我在 Windows7 上使用节点 v0.10.35。
【问题讨论】:
-
正如你所提到的,在你的测试中你传递了一个特定的文件(即“speakers.json”)。在我发布答案之前,我想问一下:“那个文件在哪里?”
-
基于您的生成器中的this line,它似乎希望该文件已经存在。是这样吗?
-
一开始我没有文件。子生成器创建文件,我想测试它是否被创建。就这样。也许我做错了什么,也许是的。但是,据我了解代码,
before部分在测试实际运行之前准备环境。所以如果之前调用了生成器,那么文件应该已经创建了。 -
好的。然后我有两个观察。 (1) 您的
:speaker子生成器没有创建文件,并且 (2) 您需要在测试中使用绝对路径。我会尽快在答案中撰写我的建议。 -
仅供参考...我向您的仓库提交了 PR (#1) 以及我建议的修复程序。 :-)
标签: javascript node.js mocha.js yeoman yeoman-generator