【问题标题】:JS module exports aren't working with JestJS 模块导出不适用于 Jest
【发布时间】:2020-07-24 09:52:49
【问题描述】:

我正在尝试在 Node.js 环境中设置 Jest。以下是在名为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,我该怎么做?

【问题讨论】:

    标签: javascript node.js jestjs


    【解决方案1】:

    你试过了吗:

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

    在你的测试中:

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

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

    【讨论】:

      【解决方案2】:

      如果你这样做exports.sum = sum;

      你需要像这样导入它:const {sum} = require('../controllers/a');

      【讨论】:

        猜你喜欢
        • 2017-10-18
        • 2022-07-10
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 2019-04-01
        • 2018-09-16
        • 2018-01-08
        相关资源
        最近更新 更多