Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何测试以导出默认值导出的js文件?_Javascript_Unit Testing_Testing_Jestjs - Fatal编程技术网

Javascript 如何测试以导出默认值导出的js文件?

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测试该文件,如下所示

我有一个简单的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);
});
测试以这种方式失败,但是如果我导出为
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
中作为测试插件