单元测试内部功能?

时间:2019-07-15 13:19:43

标签: javascript testing mocha chai helper

我有一个具有内部函数的函数,对于我的单元测试,我只想测试内部函数的功能,但是当我导出该函数并调用内部函数时, 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不是函数。

我在做什么错了?

3 个答案:

答案 0 :(得分:3)

如果要链接功能,可以尝试类似的操作。

main.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
  });
});

答案 1 :(得分:2)

实际上,您不能以这种方式在另一个函数内部调用函数声明。一种解决方案是在functionToBeTested外部声明mainFunction,然后将其命名为:

main.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);
    ...
  });
})

答案 2 :(得分:1)

这是因为仅导出mainFunction()而不导出functionToBeTested(),因此在此模块之外,JS不知道functionToBeTested()的存在。

我建议您将functionToBeTested分开移动并导出该函数,或者使用帮助程序来调用它。