使用Chai的Expect断言库时遇TypeError问题求助
解决Chai Expect断言库的常见错误
1. 修复TypeError: expect is not a function错误
你代码第一行的var expect = chai.expect();是核心错误——chai.expect本身是一个函数,不需要加括号调用。加括号后,expect会被赋值为chai.expect()返回的对象,而非函数本身,后续调用expect(...)自然会报错。
正确的引入方式:
- 浏览器环境(已加载Chai脚本):
var expect = chai.expect; // 不要加括号 - Node.js环境:
var expect = require('chai').expect; // 同样不要加括号
2. 修复to.throw()的用法错误
to.throw()用于断言函数调用时会抛出指定错误,你当前的写法是直接执行detectNetwork()并把结果传给expect,这不符合语法要求。必须把要测试的函数包裹成匿名函数或箭头函数,让Chai在断言时才执行它。
错误写法:
expect(detectNetwork('5112345678901234')).to.throw('MasterCard');
正确写法:
// 匿名函数写法 expect(function() { detectNetwork('5112345678901234'); }).to.throw('MasterCard'); // 箭头函数写法(更简洁) expect(() => detectNetwork('5112345678901234')).to.throw('MasterCard');
3. 解决偶发的expect().to.equal() is not a function错误
这个问题通常源于变量污染或重复定义:
- 检查代码中是否有其他地方重新定义了
expect变量,比如不小心覆盖了正确的函数引用。 - 确保所有测试用例中使用的
expect都是正确引入的函数,没有被错误赋值为对象或其他类型。
修正后的完整测试代码示例
// 正确引入expect var expect = chai.expect; // 浏览器环境 // 或者 Node.js环境:var expect = require('chai').expect; it('has a prefix of 51 and a length of 16', function() { expect(() => detectNetwork('5112345678901234')).to.throw('MasterCard'); }); it('has a prefix of 52 and a length of 16', function() { expect(detectNetwork('5212345678901234')).to.equal('MasterCard'); }); it('has a prefix of 53 and a length of 16', function() { expect(detectNetwork('5312345678901234')).to.equal('MasterCard'); });
内容的提问来源于stack exchange,提问作者Heaven
相关产品推荐
相关产品推荐

