JS模块导出不适用于Jest

时间:2020-07-24 09:52:49

标签: javascript node.js jestjs

我正在尝试在Jest环境中设置Node.js。以下是名为controllers/a.js的文件中定义的功能:

function sum(a, b) {
    return a + b;
}

module.exports = sum;

这是从tests.js文件访问的:

const sum = require('../controllers/a');

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

这很好:

 PASS  tests/tests.js
  √ adds 1 + 2 to equal 3 (5 ms)

但是,如果我如下修改a.js

function sum(a, b) {
    return a + b;
}

exports.sum = sum;

然后我得到TypeError

 FAIL  tests/tests.js
  × adds 1 + 2 to equal 3 (3 ms)

  ● adds 1 + 2 to equal 3

    TypeError: sum is not a function

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

尝试了以下导出方式,但都无法通过上述TypeError

  • module.exports.sum = sum;
  • module.exports = { sum: sum };
  • exports = sum;
  • exports = { sum: sum };

我需要导出多个功能以在Jest中进行测试。如果Jest无法按预期识别module.exports,该怎么办?

2 个答案:

答案 0 :(得分:3)

您尝试过吗:

function sum() { ... }
exports.sum = sum;

并在您的测试中:

const { sum } = require('../controllers/a');

因为在测试中导入文件时,您需要查看require()返回的对象以找到正确的函数(此处为sum)。

答案 1 :(得分:2)

如果您进行exports.sum = sum;

您需要将其导入,例如:const {sum} = require('../controllers/a');