Jest 测试中的 module.exports 多个函数

ges*_*nha 6 javascript testing jestjs

阅读 Jest 文档后,当提到从测试文件中导出单个函数时,它们显示了以下示例:

function sum(a, b) {
  return a + b;
}
module.exports = sum;
Run Code Online (Sandbox Code Playgroud)

现在,如果我有多个特定函数,我想在测试文件中导出,如下所示:

function sum(a, b) {
  return a + b;
}
function multiply(a, b) {
  return a * b;
}
function subtract(a, b) {
  return a - b;
}
module.exports = sum;
module.exports = multiply;
Run Code Online (Sandbox Code Playgroud)

multiply函数是唯一被导出的函数。我怎样才能导出这些功能?或者只是我文件的一部分?

小智 8

你可以这样做:

module.exports = {};
module.exports.sum = function sum(a, b) {
  return a + b;
}
module.exports.multiply = function multiply(a, b) {
  return a * b;
}
module.exports.subtract = function subtract(a, b) {
  return a - b;
}
Run Code Online (Sandbox Code Playgroud)

你这样使用它:

var MyMathModule = require('./my_math_module');
MyMathModule.sum(a, b);
MyMathModule.multiply(a, b);
MyMathModule.subtract(a, b);
Run Code Online (Sandbox Code Playgroud)


spa*_*row 5

首先,在您的示例中,您所做的就是用函数覆盖对象(这完全没问题)exports

exportsmodule.exports一个对象并且实际上是同一个对象(即module.exports === exports // true

要执行您想要的操作,您可以通过以下几种方式执行此操作:

exports.sum = sum
exports.multiply = multiply
Run Code Online (Sandbox Code Playgroud)

或者

module.exports = { sum: sum, multiply: multiply } // etc
Run Code Online (Sandbox Code Playgroud)

或者

module.exports.sum = sum
module.exports.multiply = multiply
Run Code Online (Sandbox Code Playgroud)

  • 这不是 Jest 特定的,而是 Node.js 特定的。如果您不“导出”它,它就会对程序的其余部分“隐藏”,并且无法访问它。 (2认同)