Mocha测试类代码正常但自定义函数测试失败求助
Mocha测试独立本地函数失败,但类方法测试正常
问题情况
在Codecademy学习Mocha测试模块时,本地测试独立函数无法正常运行,但Node.js、Mocha及package.json配置均无问题——从Codecademy复制的类代码能在本地正常通过测试。仅当切换到独立函数测试时出现故障,需排查原因。
相关代码
index.js 代码
const returnThree = () => { return 3; } module.exports = returnThree; /* const Calculate = { factorial(inputInt) { if (inputInt === 0){ return 1; } for(let x = inputInt - 1; x > 0; x --){ inputInt *= x; } return inputInt; } } module.exports = Calculate; */
indexTest.js 测试代码
const assert = require("assert"); const Calculate = require('./index.js') describe('returnThree', () => { it('returns the number three', () =>{ const expectedAnswer = 3; const result = Calculate.returnThree(); assert.strictEqual(result, expectedAnswer); }) }); /* describe('Calculate', () => { describe('.factorial', () => { it('returns the multiple of all the integers before it', () => { const testNumber = 5; const expectedAnswer = 120; const result = Calculate.factorial(testNumber); assert.equal(result, expectedAnswer); }); it('returns the multiple of all the integers before it', () => { const testNumber = 3; const expectedAnswer = 6; const result = Calculate.factorial(testNumber); assert.equal(result, expectedAnswer); }); it('returns 1 when you pass in 0.', ()=>{ const testNumber = 0; const expectedAnswer = 1; const result = Calculate.factorial(testNumber); assert.equal(result, expectedAnswer); }) }); }); */
package.json 配置
{ "name": "testing-suite", "version": "1.0.0", "description": "", "main": "index.js", "directories": { "test": "test" }, "scripts": { "test": "mocha indexTest.js" }, "author": "", "license": "ISC", "devDependencies": { "mocha": "^10.7.3" } }
问题原因与解决办法
核心问题
当你导出独立函数returnThree时,const Calculate = require('./index.js')中的Calculate就是returnThree函数本身,而非包含该函数的对象。此时调用Calculate.returnThree()会报错,因为函数对象并没有returnThree这个属性。
解决方法(二选一)
修改测试代码
直接调用导入的函数即可,无需访问属性:// 替换原测试中的result行 const result = Calculate();修改index.js的导出方式
将函数包装在对象中导出,保持与类代码一致的结构:// 替换原module.exports行 module.exports = { returnThree };这样原测试代码的调用方式无需修改即可正常运行。
内容的提问来源于stack exchange,提问作者Ben Wheatley
相关产品推荐
相关产品推荐

