我尝试使用inDir()
帮助程序方法测试生成器,在2个不同的目录中运行2个不同的测试场景,并获得令人困惑的结果。
第一次运行生成器时,一切都按预期工作。它将所有文件复制到我的tmp1
目录中。
但是,当从第二个describe
块运行生成器时,复制的唯一文件是.yo-rc
和Gruntfile.js
。
我认为这与我的测试设置有关,因为如果我在第一个.skip
上放置了describe
,那么生成器会在tmp2/
中正确运行。
在下面的示例中,我使用了相同的配置来减少变量的数量,但实际上,每个生成器都会传递一组不同的提示。
这是我的测试文件:
let prompts = require('../fixtures/prompts.js');
describe('generator,', function () {
this.timeout(0);
let generator = require.resolve('../../app/index.js');
beforeEach(function() {
let options = {
skipInstall: true,
}
this.generator = helpers.run(require.resolve('../../app/index.js'))
.withPrompts(prompts.default)
.withOptions(options)
});
describe('in tmp1/', function() {
beforeEach(function(done) {
this.generator
.inDir(path.resolve(__dirname, '../../tmp1'))
.on('end', done);
});
it('should copy the files', function(){
assert.file('dummyfile.txt');
});
});
describe('in tmp2/', function() {
beforeEach(function(done) {
this.generator
.inDir(path.resolve(__dirname, '../../tmp2'))
.on('end', done);
});
it('should not be crazy', function() {
assert.file('dummyfile.txt');
});
});
});
可能导致这种情况的原因是什么?
注意:
对于上下文,我想测试在已包含由基本生成器创建的项目的文件夹中运行子生成器的场景,以确保它正确使用现有项目配置。我不确定我在这里做的事情是否是实现这一目标的最佳方法,但我认为这个问题可能会让人感到困惑,值得自己提出问题。
答案 0 :(得分:1)
inDir()
清除目录。
如果您需要存在一些以便运行第二个生成器,那么您可以使用inDir
的回调参数来创建虚拟文件并对其进行断言。