Как да избегнем предупрежденията на Jest: Обратното извикване на describe не трябва да връща стойност?

След като надстроих Jest от версия 23 на версия 24, когато изпълнявам моите тестове, получавам предупредително съобщение като това за почти всеки тест:

Обратното извикване „describe“ не трябва да връща стойност. Връщането на стойност от „describe“ ще се провали на теста в бъдеща версия на Jest.

Придружаващото проследяване на стека сочи към този модул:

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, така че тези предупреждения да не се издават при използване на функции със стенографски стрелки?


person Patrick Hund    schedule 17.03.2019    source източник
comment
Някаква конкретна причина, различна от личните предпочитания, че трябва да използвате стенографски синтаксис? Това изглежда е 100% разрешимо чрез добавяне на скоби.   -  person Alexander Staroselsky    schedule 17.03.2019
comment
Лични предпочитания, просто съм свикнал с него и харесвам краткия синтаксис   -  person Patrick Hund    schedule 17.03.2019
comment
Получавам същото предупреждение с малко по-различно проследяване на стека, независимо дали моите describe()s използват функции със стенографски стрелки или не. Оказва се, че това е грешка в PhpStorm, която трябва да бъде разрешена във v2018.3.6. Заобиколно решение можете да намерите тук: intellij-support.jetbrains.com/hc/en-us/community/posts/   -  person urig    schedule 21.03.2019
comment
Това също се случва, когато вложите описание в описание. Тези промени са грешки. Ако имам време, ще докладвам това в репото.   -  person lonix    schedule 03.04.2019
comment
@Ionix Е, фактът, че издават подробно предупреждение за оттегляне, кара да изглежда, че не е грешка, а функция   -  person Patrick Hund    schedule 03.04.2019


Отговори (3)


Предполагам, че ако наистина искате да запазите съществуващия си тестов синтаксис и просто искате да избегнете предупреждението, можете да направите следното:

const realDescribe = describe;
describe = ((name, fn) => { realDescribe(name, () => { fn(); }); });

Просто добавете този код към модул, включен във вашия setupFilesAfterEnv и той ще се стартира „незабавно след като тестовата рамка е инсталирана в средата" и „преди всеки тест".

Горният код ще настрои глобалния describe на функция, която извиква реалния describe, но обвива параметъра function в анонимна функция, която не връща нищо.

person Brian Adams    schedule 17.03.2019

Този проблем се появява и ако използвате глобални функции, които Jest v24 не разпознава. Преобразувам някои тестове на Mocha в Jest и before() на Mocha хвърляше същата грешка:

Обратното извикване „describe“ не трябва да връща стойност. Връщането на стойност от „describe“ ще се провали на теста в бъдеща версия на Jest.

Проследяването на стека посочи, че describe() е виновникът, но корекцията преобразуваше вложените before() извиквания в съвместими с Jest beforeAll(). Тук може да има свързан проблем с опитите да се използва it() вместо test(), но това може да е схващане, определено има it() в тестовата среда на Jest.

person worc    schedule 27.03.2019

Може да е свързано с необработено изключение, хвърлено вътре в описанието на обратно извикване. Например, хрумна ми, когато исках да получа достъп до макет на несъществуващ член (извън тестовия блок):

logger.info1111.mockImplementation((m, d) => console.info(m, d));
person Yury Kozlov    schedule 06.04.2019