【问题标题】:Unit testing an inner function?单元测试内部功能?
【发布时间】:2019-11-24 05:01:02
【问题描述】:

我有一个具有内部函数的函数,对于我的单元测试,我只想测试内部函数的功能,但是当我导出函数并调用内部函数时,npm 测试返回错误。

在我的main.js

mainFunction = () => {
  functionToBeTested = () => {
    // some code
  }
}

module.exports = {mainFunction: mainFunction}

在我的test.js

const chai    = require("chai");
const assert  = require("chai").assert;
const mainFunction = require("./main");

describe ("test", () => {
 it("returns results", () => {
  let result = mainfunction.functionToBeTested(args);
  //equal code
  });
})

但是当我运行 npm 测试时,它说:

mainfunction.functionToBeTested 不是函数。

我做错了什么?

【问题讨论】:

  • 你在哪里实际声明要测试的函数?是mainFunction中的声明吗?也许 mainFunction 应该调用这个函数,而不是声明它。如果函数没有在 mainFunction 中声明,我看不到它在任何地方声明。
  • 关于您是否应该实际测试内部/私有函数的相关评论:stackoverflow.com/questions/105007/…

标签: javascript testing mocha.js chai helper


【解决方案1】:

如果你想链接你的函数,你可以尝试类似的方法。

ma​​in.js

const mainFunction = () => {
  const functionToBeTested = () => {
    return "I got it";
  }
  return { functionToBeTested };
}

module.exports = { mainFunction };

test.js

const chai    = require("chai");
const assert  = require("chai").assert;
const mainFunction = require("./main");

const mf = mainFunction();

describe ("test", () => {
 it("returns results", () => {
  let result = mf.functionToBeTested(args);
    //equal code
  });
});

【讨论】:

    【解决方案2】:

    实际上,您不能以这种方式在另一个函数中调用函数声明。一个解决方案是在mainFunction 之外声明functionToBeTested,然后调用它:

    ma​​in.js

    const functionToBeTested = () => {
      // some code
    };
    
    const mainFunction = () => {
      functionToBeTested();
    };
    
    module.exports = { mainFunction, functionToBeTested }
    

    test.js

    const chai    = require("chai");
    const assert  = require("chai").assert;
    const { mainFunction, functionToBeTested } = require("./main");
    
    describe ("test", () => {
      it("tests mainFunction", () => {
        let main = mainfunction(args);
        ...
      });
    
      it("tests functionToBeTested"), () => {
        let tested = functionToBeTested(args);
        ...
      });
    })
    

    【讨论】:

      【解决方案3】:

      因为只导出了mainFunction(),没有导出functionToBeTested(),所以在这个模块之外JS不知道functionToBeTested()的存在。

      我会建议您将 functionToBeTested 分开并导出,或者有一个辅助方法来调用它。

      【讨论】:

        猜你喜欢
        • 2015-04-09
        • 1970-01-01
        • 2022-12-19
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多