Node.js v9.4.0测试套件中如何用箭头函数设置超时?
解决Node.js v9.4.0测试套件中箭头函数设置超时的报错问题
嘿,我之前也碰到过一模一样的情况!在Node.js v9.4.0搭配Mocha这类主流测试框架时,用箭头函数写测试用例或钩子触发超时相关报错,核心原因是箭头函数不会绑定自身的this——测试框架需要你在测试上下文里通过this.timeout()设置超时,但箭头函数会继承外层作用域的this,根本拿不到测试框架提供的上下文对象。
不过你完全不用修改describe那一行的箭头函数,只需要调整内部的测试用例或钩子函数写法就行,下面给你两种靠谱的方案:
方案1:在需要设置超时的回调中改用普通函数
describe的回调用箭头函数完全没问题(因为它不需要访问测试上下文的this),只需要把it、beforeEach这类需要调用this.timeout()的回调换成普通函数即可:
describe('我的测试套件', () => { // 这里的箭头函数保留不动 it('需要延长超时的异步测试', function() { this.timeout(10000); // 现在能正常访问测试上下文的this了 // 你的异步测试逻辑,比如耗时较长的Promise操作 return new Promise(resolve => setTimeout(resolve, 8000)); }); beforeEach(function() { // 钩子函数同样改用普通函数 this.timeout(5000); // 测试前置操作 }); });
方案2:直接给it传入超时时间参数(不用依赖this)
如果你坚持想在it里用箭头函数,可以利用测试框架的另一种超时设置方式——把超时时间作为第二个参数传给it,这样完全不需要用到this:
describe('我的测试套件', () => { // 依旧保留箭头函数 it('需要延长超时的异步测试', 10000, () => { // 第二个参数是超时毫秒数 // 你的异步测试逻辑 return new Promise(resolve => setTimeout(resolve, 8000)); }); });
这两种方案都不需要修改describe行的写法,适配Node.js v9.4.0对应的测试框架版本(比如Mocha 5.x左右,这个版本完全兼容Node v9)。第一种方案更灵活,适合需要在测试过程中动态调整超时的场景;第二种写法更简洁,适合固定超时的测试用例。
内容的提问来源于stack exchange,提问作者satish
相关产品推荐
相关产品推荐

