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

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这个属性。

解决方法(二选一)

  1. 修改测试代码
    直接调用导入的函数即可,无需访问属性:

    // 替换原测试中的result行
    const result = Calculate();
    
  2. 修改index.js的导出方式
    将函数包装在对象中导出,保持与类代码一致的结构:

    // 替换原module.exports行
    module.exports = { returnThree };
    

    这样原测试代码的调用方式无需修改即可正常运行。

内容的提问来源于stack exchange,提问作者Ben Wheatley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:12:06