Javascript 如何测试以导出默认值导出的js文件?
我有一个简单的JavaScript文件,如下所示:Javascript 如何测试以导出默认值导出的js文件?,javascript,unit-testing,testing,jestjs,Javascript,Unit Testing,Testing,Jestjs,我有一个简单的JavaScript文件,如下所示: // sum.js function sum(a, b) { return a + b; } export default { sum }; // sum.test.js const { sum } = require('./sum') test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); }); 我想在同一个文件夹中使用jest测试该文件,如下所示
// sum.js
function sum(a, b) {
return a + b;
}
export default { sum };
// sum.test.js
const { sum } = require('./sum')
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
我想在同一个文件夹中使用jest测试该文件,如下所示:
// sum.js
function sum(a, b) {
return a + b;
}
export default { sum };
// sum.test.js
const { sum } = require('./sum')
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
测试以这种方式失败,但是如果我导出为module.exports=sum,那么一切都会正常工作代码>而是导出默认值{sum}代码>但我不允许更改原始js文件,所以我只能更改测试文件。在这种情况下,我如何才能成功地完成测试
我尝试过的解决方案(但失败如下)
const{sum}=require('./sum')。默认值
const{sum}=require('./sum').default()
从“/sum”导入{sum}
将默认导出作为具有单个属性的对象是非常奇怪的,因为这意味着访问其中的值至少需要两行。首先使用不带括号的import
访问对象,然后从中提取属性:
import sumObj from './sum';
const { sum } = sumObj;
看起来有点难看。理想情况下,您希望将sum.js
文件更改为具有命名导出-例如,将sum
更改为命名导出,以便可以轻松导入:
export function sum(a, b) {
(但是,如果您不能更改原始文件,这是很不幸的)可能是offtop,但是您知道为什么const{sum}=require('./sum')。默认值在这里可能不起作用吗?在我看来,这等于“显式默认导入+解构”。我正在检查是否能回答这个问题。我尝试安装@babel/plugin transform modules commonjs
并使用const{sum}=require('./sum')。默认值对我来说是可行的,因为某种原因。也许你的转换配置在某个地方弄乱了什么,你可以记录require('./sum')
的结果,看看会发生什么,它可能会给你一个想法。我已经安装了插件并使用了。默认值
,但它仍然向我抛出相同的错误@CertainPerformance Check out如果你好奇的话,我只是为了演示一下。它非常简单,npm安装
然后npm测试
运行时没有问题。确保将“@babel/plugin transform modules commonjs”
放在.babelrc
中作为测试插件