compose с суб-генератором не дразнит, как ожидалось? - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь проверить мой генератор, который, используя composeWith(), опирается на суб-генератор generator-express :

this.composeWith(require.resolve('generator-express/app'), {dirname: this.props.app_name, createDirectory: 'n'});

Это выдержка из моеготест с использованием фиктивного генератора-пустышки:

var deps = [
      [helpers.createDummyGenerator(), require.resolve('generator-express/app')]
];

describe('generator-cesium/app Test', () => {
    beforeEach(() => {
        return helpers.run(path.join(__dirname, '../generators/app'))
            .inDir(path.join(__dirname, 'tmp'))
            .withPrompts({
                viewerContext: '/',  // eslint-disable-line camelcase
                appName: 'app'       // eslint-disable-line camelcase
            })
            .withGenerators(deps)
    });
...

Но я получаю следующую ошибку:

Error [ERR_UNHANDLED_ERROR]: Unhandled error. (TypeError: Cannot read property 'match' of undefined)

      at Immediate.setImmediate (node_modules/generator-express/node_modules/yeoman-generator/lib/index.js:406:18)

Ошибка, указывающая на то, что суб-генератор все еще выполняется, приводит меняверить, что издевательство на самом деле не работает?

1 Ответ

0 голосов
/ 27 февраля 2019

Я думаю, что массив deps работает только для генераторов устаревших стилей, использующих псевдонимы имен вместо имен путей.

Используя require.resolve(), я думаю, что самый простой способ издеваться над генератором - использовать такой инструмент, как jest.mock, proxyquire или mockery.

Например:

jest.mock('../generators/app', () => {
    const helpers = require('yeoman-test');
    helpers.createDummyGenerator();
});
...