javascript - 如何测试默认导出的js文件?

标签 javascript unit-testing testing jestjs

我有一个像这样的简单 JavaScript 文件:

// sum.js
function sum(a, b) {
  return a + b;
}
export default { sum };

我想在同一文件夹中用 jest 测试该文件,如下所示:

// sum.test.js
const { sum } = require('./sum')

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

测试失败了,但是如果我导出为 module.exports = sum; 而不是 export default { sum }; ,一切都会完美,但我不允许更改原始js文件,所以我只能更改测试文件。在这种情况下我怎样才能成功完成测试?

我尝试过的解决方案(但失败的如下)

  • const { sum } = require('./sum').default
  • const { sum } = require('./sum').default()
  • 从“./sum”导入 { sum}

最佳答案

将默认导出设置为具有单个属性的对象是非常奇怪的,因为这意味着访问其中的值将至少两行。首先使用不带括号的 import 来获取对象,然后从中提取属性:

import sumObj from './sum';
const { sum } = sumObj;

看起来有点丑。理想情况下,您希望将 sum.js 文件更改为具有命名导出 - 例如,使 sum 成为命名导出,以便可以轻松导入它:

export function sum(a, b) {
import { sum } from './sum';

(但是,如果您无法更改原始文件,那就很遗憾了)

关于javascript - 如何测试默认导出的js文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59595892/

相关文章:

java - 如何在 Espresso 中重新运行失败的测试? - 头脑 Storm

ruby-on-rails - rails 中 mock 和 stubs 的实际例子

java - Mockito: "Invalid use of argument matchers!",但我已经一直在使用匹配器

c# - 使用 LocalDB 进行集成测试

javascript - 异步等待问题

javascript - 如何在 safari 中找到 Shadow DOM 中的元素? ( polymer )

javascript - 重新加载后如何保存对列表的更改

javascript - 获取 : Reject promise with JSON error object

c# - 明确设置测试通过/失败?

ruby - 使用 Ruby 进行测试驱动开发