Для чего можно использовать помощник по тестированию yoman's withGenerators?

В последнее время я создавал много тестов для генераторов yeoman, и у меня возникли проблемы с пониманием цели withGenerators() вспомогательный метод.

Приведенный пример:

var angular = new RunContext('../../app');
 angular.withGenerators([
   '../../common',
   '../../controller',
   '../../main',
   [helpers.createDummyGenerator(), 'testacular:app']
 ]);

Сама функция:

RunContext.prototype.withGenerators = function (dependencies) {
  assert(_.isArray(dependencies), 'dependencies should be an array');
  this.dependencies = this.dependencies.concat(dependencies);
  return this;
};

Я вижу, что функция добавляет массив зависимостей к объекту Run Context, причем каждый элемент в массиве является путем к зависимому генератору.

Для чего используются эти пути?

Когда и зачем мне нужно использовать этот метод?

В приведенном примере вызов angular.withGenerators([...]) идентичен вызову yo angular, yo angular:common, yo angular:controller и т. д. из командной строки, или он каким-то образом имитирует или модифицирует вызовы composeWith() в реальном генераторе?

В чем разница между запуском withGenerators() в тестах и ​​вызовом composeWith() из самого генератора?


person Deimyts    schedule 06.07.2016    source источник


Ответы (1)


Это используется для composeWith() (или устаревших методов invoke() и hookFor()).

Вы можете увидеть соответствующий код здесь: https://github.com/yeoman/yeoman-test/blob/master/lib/index.js#L173-L188

По сути, при вызове composeWith() он будет использовать макет генератора-пустышки, который вы передали, вместо того, который разрешит среда.

На данный момент сложная часть заключается в том, что если вы передадите настройки пути local для composeWith, он будет игнорировать заглушки — вы можете увидеть заполненную ошибку здесь https://github.com/yeoman/generator/issues/704 (в билете предлагаются некоторые обходные пути вручную)

person Simon Boudrias    schedule 08.07.2016