Javascript 如何避免玩笑警告:A";描述;回调不能返回值?

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', () =&

将Jest从版本23升级到版本24后,在运行测试时,我几乎每次测试都会收到这样的警告消息:

“描述”回调不能返回值。 在Jest的未来版本中,从“descripe”返回一个值将导致测试失败

伴随的堆栈跟踪指向此模块:

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));