如何避免开玩笑警告:“描述”回调一定不能返回值?

Pat*_*und 8 javascript jestjs arrow-functions

将Jest从版本23升级到版本24之后,在运行测试时,几乎所有测试都会收到类似以下的警告消息:

“描述”回调不得返回值。从“描述”中返回值将在以后的Jest版本中使测试失败。

相应的堆栈跟踪点指向此模块:

addSpecsToSuite (node_modules/jest-jasmine2/build/jasmine/Env.js:443:15)
Run Code Online (Sandbox Code Playgroud)

原因是我喜欢在测试中使用箭头函数的简写形式,当函数主体仅包含一个语句时,省略花括号,例如:

describe('true', () =>
    it('should be truthy', () =>
        expect(true).toBeTruthy()));
Run Code Online (Sandbox Code Playgroud)

it语句显然返回,而不是undefined,因此发出警告。

我发现了两种解决方法:

?不要使用速记箭头功能

describe('true', () => {
    it('should be truthy', () =>
        expect(true).toBeTruthy());
});
Run Code Online (Sandbox Code Playgroud)

?使用void到部队返回undefined

describe('true', () =>
    void it('should be truthy', () =>
        expect(true).toBeTruthy()));
Run Code Online (Sandbox Code Playgroud)

我发现这些选项都不可接受,我不想重构成千上万的测试只是为了让Jest(或Jasmine)高兴。

所以我的问题是:

有没有一种配置Jest的方法,以便在使用速记箭头功能时不会发出这些警告?

Bri*_*ams 5

我猜您是否真的想保留现有的测试语法,而只是想避免警告,可以这样做:

const realDescribe = describe;
describe = ((name, fn) => { realDescribe(name, () => { fn(); }); });
Run Code Online (Sandbox Code Playgroud)

只需将该代码添加到您所包含的模块中setupFilesAfterEnv,它将“在环境中安装了测试框架之后立即”和“在每次测试之前”运行。

上面的代码会将全局设置describe为一个函数,该函数调用real,describe但将function参数包装在不返回任何内容的匿名函数中。