运行 Jest 时替换 `require.context`

Posted

技术标签:

【中文标题】运行 Jest 时替换 `require.context`【英文标题】:Replacement for `require.context` when running Jest 【发布时间】:2017-07-07 06:14:21 【问题描述】:

我正在尝试使用 Jest 为我的 React 应用程序运行测试,但由于错误提示 require.context 不是函数,我的测试一直失败。我正在寻找Jest 不会阻塞的功能的替代品。我正在尝试动态地require 并从Vue.js 修改一些*.vue 文件,以便稍后在我的应用程序中使用。除此之外,我偶尔会收到无法识别.vue 文件格式的错误,并说无法解析它们。这是有问题的代码:

function inject(comp) 
    comp.methods = Object.assign(, comp.methods, stub.methods);
    return comp;
 

let req = require.context('./', false, /\.vue$/);
components.forEach(function (component) 
    try 
        let filePath = __dirname + "\\" + component + '.vue';
        let injected = inject(req(filePath));
        Vue.component(getComponentName(component), injected);

        let appComponent = 
            name: injected.name,
            props: 
                autocompletion: 
                    metadata: getComponentName('template'),
                    score: xTemplatesScore,
                    attributes: injected.props || []
                
            
        ;

        appComponents.push(appComponent);
     catch (err) 
        console.log(err);
        console.error('Vue file was not found for component:' + component + '. Please rename your files accordingly ( component-name.vue )');
    
);

【问题讨论】:

How can I mock Webpack's require.context in Jest?的可能重复 【参考方案1】:

如果有人仍然遇到这个问题,你需要知道 require.context 是 webpack 特有的功能,所以它不能开玩笑。

您可以尝试模拟它,就像在这个How can I mock Webpack's require.context in Jest? SO 问题中已经提供的答案一样。但是如果没有任何解决方法,您将无法使用它。

【讨论】:

以上是关于运行 Jest 时替换 `require.context`的主要内容,如果未能解决你的问题,请参考以下文章

运行测试时出错 - jest.mock 不是函数

如何用 Jest 模拟/替换对象的 getter 函数?

运行 Jest 测试时未定义`regeneratorRuntime`

在 react native + typescript 应用程序上运行 jest 时出错(Jest 遇到了意外的令牌)

当您运行 jest --coverage 时,Branches 列的作用/含义是啥?

如何在 Jest 测试中使用 nuxt 运行时配置变量