Javascript 如何避免玩笑警告:A";描述;回调不能返回值?
将Jest从版本23升级到版本24后,在运行测试时,我几乎每次测试都会收到这样的警告消息: “描述”回调不能返回值。 在Jest的未来版本中,从“descripe”返回一个值将导致测试失败 伴随的堆栈跟踪指向此模块:Javascript 如何避免玩笑警告:A";描述;回调不能返回值?,javascript,jestjs,arrow-functions,Javascript,Jestjs,Arrow Functions,将Jest从版本23升级到版本24后,在运行测试时,我几乎每次测试都会收到这样的警告消息: “描述”回调不能返回值。 在Jest的未来版本中,从“descripe”返回一个值将导致测试失败 伴随的堆栈跟踪指向此模块: addSpecsToSuite (node_modules/jest-jasmine2/build/jasmine/Env.js:443:15) 这是因为我喜欢在测试中使用简写版的箭头函数,当函数体只包含一条语句时,省略大括号,例如: describe('true', () =&
addSpecsToSuite (node_modules/jest-jasmine2/build/jasmine/Env.js:443:15)
这是因为我喜欢在测试中使用简写版的箭头函数,当函数体只包含一条语句时,省略大括号,例如:
describe('true', () =>
it('should be truthy', () =>
expect(true).toBeTruthy()));
it
语句显然返回的不是undefined
,因此发出警告
我找到了两种解决方法:
① 不要使用速记箭头功能
describe('true', () => {
it('should be truthy', () =>
expect(true).toBeTruthy());
});
② 使用void
强制返回未定义的
describe('true', () =>
void it('should be truthy', () =>
expect(true).toBeTruthy()));
我发现这两个选项都不可接受,我不想为了取悦Jest(或Jasmine)而重构数千个测试
所以我的问题是:
有没有办法配置Jest,以便在使用速记箭头功能时不会发出这些警告?我想如果您真的想保留现有的测试语法,只是想避免警告,您可以这样做:
const realsdescripe=descripe;
descripe=((名称,fn)=>{realsdescripe(名称,()=>{fn();});});
只需将该代码添加到包含在环境中的模块中,它将“在环境中安装测试框架之后”和“在每次测试之前”立即运行
上面的代码将全局
descripe
设置为调用实descripe
的函数,但将函数
参数包装在一个匿名函数中,该函数不返回任何内容。如果您使用的是Jest v24无法识别的全局函数,则此问题也会出现。我正在将一些Mocha测试转换为Jest,Mocha的before()
抛出了相同的错误:
“描述”回调不能返回值。在Jest的未来版本中,从“descripe”返回一个值将导致测试失败
堆栈跟踪指向罪魁祸首是
descripe()
,但修复程序正在将嵌套的before()
调用转换为与Jest兼容的beforeAll()
。尝试使用it()。
例如,当我想访问不存在的成员(在测试块之外)的模拟时,我想到:
除了个人偏好之外,您是否有其他特定原因需要使用速记语法?通过添加大括号,这似乎是100%可以解决的。个人喜好,我只是习惯了,我喜欢简洁的语法。无论我的descripe()
s是否使用速记箭头函数,我都会得到相同的警告,但堆栈跟踪略有不同。原来这是PhpStorm中的一个bug,将在v2018.3.6中解决。这里可以找到解决方法:当您将descripe嵌套在descripe中时,也会发生这种情况。这些变化都是错误。如果我有时间,我会在回购协议上报告这一点。@Ionix嗯,事实上,他们给出了详细的弃用警告,这似乎不是一个bug,而是一个特性
logger.info1111.mockImplementation((m, d) => console.info(m, d));