You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mocha单元测试报错isNumberPrime is not a function如何解决?

问题原因和解决方法

报错由CommonJS模块导入导出的语法错误导致,具体原因和修复方案如下:

错误根源

  • 第一处错误在素数判断文件的导出语句:你错误写成了exports.modules,Node.js中CommonJS的标准导出属性是module.exports,你的写法相当于在导出对象上额外挂载了一个modules属性,而非直接导出目标内容。
  • 第二处错误是导入导出格式不匹配:你导出的是包含isNumberPrime属性的对象,但导入时直接把整个导出对象当做函数调用,自然会触发「不是函数」的报错。

解决方案

以下两种方案二选一即可:

方案1:保留导出对象格式,修正两处语法

  1. 修改素数判断文件的导出语句:
// 原错误写法
// exports.modules = { isNumberPrime };
// 修正后
module.exports = { isNumberPrime };
  1. 修改测试文件的导入语句,使用解构赋值拿到目标函数:
// 原错误写法
// 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:48:00