模块导入和导出问题:(TypeError:featureCore 不是函数)

问题描述 投票:0回答:1

我有一个具有以下格式的节点项目:

structures/extendedClient.js

utils/feature.js

tests/feature.test.js

在extendedClient.js中我有以下内容:

class extendedClient extends Client {
    constructor(props) {
   // constructor stuff
   }

   runFeature() {
       require("../util/feature")(this);
    }
   }

   module.exports = extendedClient;

在我的 feature.js 中,我有以下内容:

module.exports = (client) => {
    /**
     *
     * @param {require("../structures/extendedClient")} client
     */
  function featureCore() {
  // stuff (requires client variable)
  }

  featureCore();
}

我尝试从另一个位置调用 featureCore() 但它无法正确导入,所以我暂时将其放在这里。但是,现在我无法在任何单元测试中引用该函数(开玩笑)。

我的 feature.test.js 文件:

const  { anotherFunction, featureCore } = require("./util/feature");


test('expect birthday core to be read', () => {
    expect(birthdayReminderCore().toBe(3))
})

我的测试套件抛出“TypeError:featureCore 不是函数”。

我确信我错过了一些明显的东西,只是希望有人能指出我正确的方向。谢谢!

javascript node.js jestjs module
1个回答
0
投票

featureCore
是在紧随其后执行的函数内定义的。因此,
featureCore
无法在该范围之外访问,因此无法导入到测试文件中

尝试这个重组:

function featureCore(client) {
    // stuff (requires client variable)
}

// Export both the featureCore function and the main module function
module.exports = {
    featureCore,
    mainFunction: (client) => {
        featureCore(client);
    }
};


class extendedClient extends Client {
    constructor(props) {
        // constructor 
    }

    runFeature() {
        require("../utils/feature").mainFunction(this);
    }
}
module.exports = extendedClient;


//feature.test.js
const { featureCore } = require("../utils/feature");

test('featureCore return correct value', () => {
    const mockClient = {}; // mock client/birthdaycore 
    expect(featureCore(mockClient)).toBe(3);
});
  • 所以现在
    featureCore
    是在顶层定义的并且可以导入。
  • 导出一个带有featureCore和mainFunction的对象。因此,您现在可以直接在测试文件中导入 featureCore。

在测试文件中,确保从 feature.js 文件正确导入 featureCore。

© www.soinside.com 2019 - 2024. All rights reserved.