运行Mocha+Istanbul测试时报expect(...).toBe is not a function如何解决
问题原因
你当前使用的 Chai 断言库没有提供 toBe() 方法,toBe() 是 Jest 专属的断言API。你当前测试流程基于 Mocha + Chai 技术栈实现,单独安装 Jest 不会生效,因为你执行测试的命令仍然调用的是 Mocha 运行器,走 Chai 的断言逻辑。
修复方案
方案1:保留现有 Mocha + Chai 技术栈(推荐,无需改动整体架构)
将代码中的断言写法替换为 Chai 支持的语法即可:
- 全等值判断对应 Chai 的
to.equal()方法 - 类型判断可以用更贴合语义的
to.be.a()方法
修改后的 demo.js 示例:
var expect = require('chai').expect describe('Array', function() { describe('indexOf()', function() { it("dovrebbe tornare -1 quando l'elemento non è presente", function() { expect([1,2,3].indexOf(4)).to.equal(-1) // 全等判断写法 expect("d").to.equal('function'); // 若要判断变量为函数,可用更规范的类型断言写法: // expect(待判断的变量/方法).to.be.a('function'); }) }) })
修改完成后执行原测试命令即可正常运行:
istanbul cover _mocha ./test/demo.js
方案2:切换为 Jest 技术栈(适合想要使用 toBe 语法的场景)
Jest 内置了断言、测试运行、覆盖率统计能力,不需要单独安装 Chai、istanbul、mocha 依赖。
- 修改
demo.js代码,移除 Chai 引入:
describe('Array', function() { describe('indexOf()', function() { it("dovrebbe tornare -1 quando l'elemento non è presente", function() { expect([1,2,3].indexOf(4)).toBe(-1) expect("d").toBe( 'function' ); }) }) })
- 替换测试执行命令为 Jest 命令,内置覆盖率统计能力:
npx jest ./test/demo.js --coverage
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

