2016-07-05 83 views
0

我想测试一个发生器,使用inDir()帮助器方法在2个不同的目录中运行2个不同的测试场景,并得到令人困惑的结果。测试yeoman子发生器

发电机第一次运行时,一切都按预期工作。它将所有文件复制到我的tmp1目录中。

但是,当发生器从第二个describe块运行时,复制的唯一文件是.yo-rcGruntfile.js

我认为这与我的测试设置有关,因为如果我在第一个describe上放置.skip,那么发生器在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'); 
    }); 
    }); 
}); 

什么导致此?

注:

对于背景下,我想测试运行已经包含由碱产生创建的项目文件夹中的一个子发生器的方案,以确保它正确地使用现有的项目配置。我不知道我在这里做什么是达到目标的最好方式,但我认为这个问题可能会让人困惑,以至于无法回答自己的问题。

回答

1

inDir()清理目录。

如果你需要一些为了运行你的第二个生成器而存在,那么你可以使用回调参数inDir来创建虚拟文件并对你的断言进行反击。

+0

这就是我最终想要做的事情:使用inDir()将文件从'tmp1'复制到'tmp2'中。但是,当我从第二个'describe'块运行生成器时,即使我没有复制文件,它也不能正常运行。在这个例子中,除了目标目录外,对helpers.run()的两个调用都是相同的,但是它们不会产生相同的结果。我担心我的测试不是彼此独立的,但我不明白为什么。 – Deimyts