使用bowerInstall和/或npmInstall测试Yeoman生成器

时间:2015-01-11 16:52:59

标签: mocha yeoman bower yeoman-generator

我有一个使用this.bowerInstall()

的Yeoman生成器

当我测试它时,它会尝试安装我用这种方式初始化的所有bower依赖项。有没有办法模拟这个功能?

this.npmInstall()功能也是如此。

2 个答案:

答案 0 :(得分:3)

我最终采用了不同的方法。如果您手动引导测试生成器,drorb的答案中的方法会起作用。如果您使用基于RunContext的设置(如Yeoman(测试页面)[http://yeoman.io/authoring/testing.html]中所述),则测试的before块看起来像这样。

before(function (done) {
  helpers.run(path.join( __dirname, '../app'))
    .inDir(path.join( __dirname, './tmp'))  // Clear the directory and set it as the CWD
    .withOptions({ foo: 'bar' })            // Mock options passed in
    .withArguments(['name-x'])              // Mock the arguments
    .withPrompt({ coffee: false })          // Mock the prompt answers
    .on('ready', function (generator) {
      // this is called right before `generator.run()`
    })
    .on('end', done);
})

您可以在'ready'回调中向生成器添加模拟函数,如下所示:

.on('ready', function(generator) {
  generator.bowerInstall = function(args) {
    // Do something when generator runs bower install
  };
})

另一种方法是在生成器本身中包含一个选项。如:

installAngular: function() {
  if (!this.options['skip-install']) {
    this.bowerInstall('angular', {
      'save': true
    });
  }
}

finalInstall: function() {
  this.installDependencies({
    skipInstall: this.options['skip-install']
  });
}

现在,您使用' skip-install'进行测试。选项,未安装依赖项。这具有确保命令行skip-install参数按预期工作的附加优点。在备用情况下,即使您使用skip-install参数运行生成器,也会执行生成器中的bowerInstallnpmInstall函数,即使installDependencies函数不是(因为它通常如上配置)

答案 1 :(得分:2)

查看testsBootstrap generator,其中包含模拟bowerInstall()函数的示例:

beforeEach(function (done) {
    this.bowerInstallCalls = [];

    // Mock bower install and track the function calls.
    this.app.bowerInstall = function () {
        this.bowerInstallCalls.push(arguments);
    }.bind(this);

}.bind(this));