javascript - composeWith 子生成器没有按预期进行模拟?

标签 javascript node.js yeoman yeoman-generator

我正在尝试测试我的生成器,它使用 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)

这个错误表明子生成器仍在执行,让我相信模拟实际上没有工作?

最佳答案

我认为 deps 数组只适用于使用名称别名而不是路径名的遗留样式生成器。

使用 require.resolve(),我认为模拟生成器的最简单方法是使用像 jest.mockproxyquire 这样的工具> 或 mock

例如:

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

关于javascript - composeWith 子生成器没有按预期进行模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54839685/

相关文章:

javascript - Typescript 中的可索引类型和数组有什么区别

javascript - 从 Javascript (JQuery) 调用 C# 函数 (WebMethod)

linux - 如何在运行 Node.js 的 Raspberry Pi (Debian) 上解决 LIBUSB_ERROR_BUSY

javascript - 使用相同的 div #id 查询 2 个 mysql 表

javascript - 无效的 JavaScript 签名仍然调用正确的 API

javascript - facebook-node-sdk 用于 node.js 范围参数?

javascript - 使用 CSRF 的 SailsJS View 层分离

javascript - 在提示之间传递数据

javascript - 自耕农网络应用程序 : Minified JS for multiple HTML pages

javascript - Yeoman 发电机,咕噜声 : proper usage of grunt-usemin with grunt-rev