Mocha单元测试报错isNumberPrime is not a function如何解决?
问题原因和解决方法
报错由CommonJS模块导入导出的语法错误导致,具体原因和修复方案如下:
错误根源
- 第一处错误在素数判断文件的导出语句:你错误写成了
exports.modules,Node.js中CommonJS的标准导出属性是module.exports,你的写法相当于在导出对象上额外挂载了一个modules属性,而非直接导出目标内容。 - 第二处错误是导入导出格式不匹配:你导出的是包含
isNumberPrime属性的对象,但导入时直接把整个导出对象当做函数调用,自然会触发「不是函数」的报错。
解决方案
以下两种方案二选一即可:
方案1:保留导出对象格式,修正两处语法
- 修改素数判断文件的导出语句:
// 原错误写法 // exports.modules = { isNumberPrime }; // 修正后 module.exports = { isNumberPrime };
- 修改测试文件的导入语句,使用解构赋值拿到目标函数:
// 原错误写法 // const isNumberPrime = require('../utils/prime-number.js'); // 修正后 const { isNumberPrime } = require('../utils/prime-number.js');
方案2:直接导出单个函数,无需修改测试代码
如果不需要导出多个方法,可以直接导出isNumberPrime函数本身,不需要包成对象,测试文件的导入语句可以保持原样:
// 素数判断文件的导出改为 module.exports = isNumberPrime;
额外提醒
你当前的素数判断逻辑有缺陷:只能判断小于121的数是否为素数,大于等于121的非素数如果仅包含大于7的质因数(比如121=1111、169=1313等),会被误判为素数,建议补充判断逻辑。
内容的提问来源于stack exchange,提问作者Manuel Abascal
相关产品推荐
相关产品推荐

