Тестирование Йоменского генератора с помощью bowerInstall и / или npmInstall

У меня есть генератор Yeoman, который использует this.bowerInstall()

Когда я тестирую его, он пытается установить все зависимости bower, которые я инициализировал таким образом. Есть ли способ издеваться над этой функцией?

То же самое касается this.npmInstall() функция.

2 ответа

Решение

Взгляните на тесты для генератора Bootstrap, он содержит пример насмешки над 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));

В конце концов я пошел с другим подходом. Метод из 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 аргумент bowerInstall а также npmInstall функции из вашего генератора выполняются, хотя, installDependencies функция не (как это обычно настраивается, как указано выше)

Другие вопросы по тегам