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

如何修正Mocha中的TypeError: 'flattenArray' is not a function错误

嘿,我来帮你搞定这个测试失败的问题!你遇到的报错和代码里的小问题其实都挺典型的,咱们一步步拆解解决:

1. 先修复递归调用的函数名拼写错误

看你flattenArray.js里的递归逻辑,你写了result = result.concat(flattenArrays(element));——这里多了个"s"!正确的函数名应该是flattenArray,这个拼写错误会导致递归时调用不存在的函数,虽然当前报错是"flattenArray is not a function",但这个问题也得先修正,不然就算导入成功了测试还是会失败。

修正后的函数代码:

// flattenArray.js
export function flattenArray(arr){
  let result = [];
  arr.forEach(function(element) {
    if(!Array.isArray(element)) {
      result.push(element);
    } else {
      // 把flattenArrays改成flattenArray
      result = result.concat(flattenArray(element));
    }
  });
  return result;
}

2. 解决ES模块与CommonJS的导入导出不兼容问题

你的函数用的是ES模块的export语法,但测试文件用的是CommonJS的require,Node.js默认情况下这两种模块系统不能直接混用,所以才会出现"flattenArray is not a function"的报错——本质是你没正确导入到这个函数。

这里有两种解决方式,选一种适合你的就行:

方式一:把测试文件改成ES模块

  • 首先在你的项目根目录的package.json里添加"type": "module",这样Node.js会把所有.js文件当作ES模块处理;
  • 然后修改测试文件的导入方式:
// flattenArray.spec.js
import chai from 'chai';
import { flattenArray } from './flattenArray.js';
const assert = chai.assert;

// 示例测试用例
describe('flattenArray', function() {
  it('should flatten a single-level nested array', function() {
    assert.deepEqual(flattenArray([1, [2, 3], 4]), [1, 2, 3, 4]);
  });

  it('should flatten deeply nested arrays', function() {
    assert.deepEqual(flattenArray([1, [2, [3, [4]]]]), [1, 2, 3, 4]);
  });
});

方式二:把函数文件改成CommonJS导出

如果你不想用ES模块,直接把flattenArray.js改成CommonJS的导出格式:

// flattenArray.js
function flattenArray(arr){
  let result = [];
  arr.forEach(function(element) {
    if(!Array.isArray(element)) {
      result.push(element);
    } else {
      result = result.concat(flattenArray(element));
    }
  });
  return result;
}

module.exports = { flattenArray };

然后测试文件里正常用require导入:

// flattenArray.spec.js
var chai = require('chai');
var assert = chai.assert;
var { flattenArray } = require('./flattenArray.js');

// 这里写你的测试用例
describe('flattenArray', function() {
  // 测试逻辑...
});

把这两个问题都修复后,再跑Mocha测试应该就能正常通过啦!

内容的提问来源于stack exchange,提问作者Kevin T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:53:12