Тестирование Йоменского генератора с помощью 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
функция не (как это обычно настраивается, как указано выше)