Как избежать предупреждений Jest: обратный вызов «описать» не должен возвращать значение? - PullRequest
7 голосов
/ 17 марта 2019

После обновления Jest с версии 23 до версии 24 при выполнении моих тестов я получаю предупреждающее сообщение, подобное этому, почти для каждого теста:

Обратный вызов «описать» не должен возвращать значение.Возврат значения из «description» провалит тест в будущей версии 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 для принудительного возврата Undefined

describe('true', () =>
    void it('should be truthy', () =>
        expect(true).toBeTruthy()));

Я не нахожу ни один из этих вариантов приемлемым, я не хочу проводить рефакторинг тысяч тестов только для того, чтобы сделатьJest (или Jasmine) счастливы.

Итак, мой вопрос:

Есть ли способ настроить Jest, чтобы эти предупреждения не выводились при использовании функций сокращенной стрелки?

Ответы [ 3 ]

4 голосов
/ 17 марта 2019

Я думаю, если вы действительно хотите сохранить существующий синтаксис теста и просто хотите избежать предупреждения, вы можете сделать следующее:

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

Просто добавьте этот код в модуль, включенный в setupFilesAfterEnv, и он будет работать «сразу после установки тестовой среды в среде» и «перед каждым тестом».

Приведенный выше код устанавливает глобальную describe для функции, которая вызывает действительный describe, но оборачивает параметр function в анонимную функцию, которая ничего не возвращает.

2 голосов
/ 27 марта 2019

Эта проблема также появляется, если вы используете глобальные функции, которые Jest v24 не распознает. Я конвертирую некоторые тесты Mocha в Jest, и Mocha before() выдавал ту же ошибку:

Обратный вызов «описать» не должен возвращать значение. Возврат значения из «description» провалит тест в следующей версии Jest.

Трассировка стека указывала на describe(), являющегося виновником, но исправление преобразовывало вложенные before() вызовы в Jest-совместимый beforeAll(). Здесь может быть проблема, связанная с попыткой использовать it() вместо test(), но это может быть сложно понять, в тестовой среде Jest определенно есть it().

0 голосов
/ 06 апреля 2019

Может быть связано с необработанным исключением, которое выдается внутри callback-функции description.Например, мне пришло в голову, когда я хотел получить доступ к макету несуществующего члена (вне тестового блока):

logger.info1111.mockImplementation((m, d) => console.info(m, d));
...