Unit testing 测试yeoman';s复合物

Unit testing 测试yeoman';s复合物,unit-testing,mocha.js,yeoman,yeoman-generator,Unit Testing,Mocha.js,Yeoman,Yeoman Generator,我正在尝试测试生成器编写场景。在我的生成器中,如果某个提示返回true,我将调用一个子生成器 if(this.bar){ this.composeWith('foo:bar', {}); } 显然,我单独测试了棒子生成器。但是,我希望调用此composeWith()时有一个断言。我猜问题出在我的技能上,而不是在测试文档上,但我不知道如何做到这一点。我知道我需要一个间谍和一个存根。但是文档只是列出了功能,而yeoman生成器本身的测试只是心理测试(我试着复制了它们的步骤,但它们大多都使用

我正在尝试测试生成器编写场景。在我的生成器中,如果某个提示返回true,我将调用一个子生成器

if(this.bar){
    this.composeWith('foo:bar', {});
}
显然,我单独测试了棒子生成器。但是,我希望调用此composeWith()时有一个断言。我猜问题出在我的技能上,而不是在测试文档上,但我不知道如何做到这一点。我知道我需要一个间谍和一个存根。但是文档只是列出了功能,而yeoman生成器本身的测试只是心理测试(我试着复制了它们的步骤,但它们大多都使用假人,我只需要去掉子生成器)


任何帮助都将不胜感激。多谢各位

我承认在这一点上缺乏文档,我们可以改进它

下面是一个简单的示例,说明如何使用间谍来测试子生成器:

var generators = require('yeoman-generator').generators;
var assert = require('yeoman-generator').assert;

before(function (done) {
    this.spy = sinon.spy();
    var Dummy = generators.Base.extend({
        exec: this.spy
    });

    helpers.run('your/generator')
        .withGenerators([
            [Dummy, 'foo:bar']
        ])
        .on('end', done);
});

// Then in your assertions
it('run the sub-generator', function () {
    assert(this.spy.calledOnce);
});
我还必须
要求('mocha-sinon')
并将
sinon.spy
更改为
this.sinon.spy
,才能让它工作。有很多方法可以在范围内获取
sinon
,因此OP可能有不同的设置。