Jest globalTeardown не запускается после неудачного теста - PullRequest
6 голосов
/ 18 января 2020

Я пытаюсь запустить и остановить серверное приложение с помощью кода. Я могу запустить и остановить его после прохождения всех тестов. Однако, если тест не пройден, globalTeardown не запускается. Вы можете проверить пример проекта здесь: https://github.com/bilalsha/sls-test-jest/tree/fail_test

teardown.js

module.exports = async function() {
    let slsOfflineProcess = global.__SERVERD__;
    slsOfflineProcess.stdin.write('q\n');
    slsOfflineProcess.stdin.pause();
    await slsOfflineProcess.kill('SIGINT');
    console.log('Serverless Offline stopped');
};

output

      7 |              expect(res.statusCode).toEqual(200);
    >  8 |              expect(res.body).toEqual('Go Serverless v1.0! Your function executed successfully!');
         |                               ^
       9 |      });
      10 | });
      11 | 

      at Object.<anonymous> (handler.test.js:8:20)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        1.972s, estimated 2s
Ran all test suites.
npm ERR! Test failed.  See above for more details.

Ответы [ 2 ]

1 голос
/ 29 января 2020

Что вы можете сделать, это добавить сценарий, содержащий функцию afterAll:

afterAll(() => {
  console.log("I ran");
});

и добавить сценарий в setupFiles или setupFilesAfterEnv. В моем случае я выкинул один реагирующий код po c, который не прошел тесты:

В конфигурации Jest package.json была эта запись:

"jest": {
    ...
    "setupFilesAfterEnv": [
      "<rootDir>/src/setupTests.js"
    ],
    ...
}

Поэтому я добавил в setupTests.js ниже приведен отредактированный файл:

// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom/extend-expect';

afterAll(() => {
  console.log("I ran");
});

Теперь, когда я запускал свои тесты, это результат:

 FAIL  src/App.test.js
  ✓ renders learn react link (14ms)
  ✕ renders class (5ms)

  ● renders class

    expect(jest.fn()).toHaveBeenCalledTimes(expected)

    Expected number of calls: 1
    Received number of calls: 0

      18 |   // someClass.someProp = "";
      19 |   render(<App />);
    > 20 |   expect(track).toHaveBeenCalledTimes(1);
         |                 ^
      21 | });
      22 | 

      at Object.<anonymous> (src/App.test.js:20:17)

  console.log src/setupTests.js:8
    I ran <---------------

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 passed, 2 total
Snapshots:   0 total
Time:        1.352s, estimated 2s
Ran all test suites.

Вы можете видеть, что I ran там даже после провала теста. Это альтернатива, которую вы можете использовать, поскольку вы положили награду, я подумал, что, возможно, решение проблемы более важно, чем то, почему globalTeardown не работает.

1 голос
/ 29 января 2020

Просто просматривая документы, похоже, что ваша проблема в вашем jest.config. js когда вы установите его на bail: true

https://github.com/bilalsha/sls-test-jest/blob/fail_test/test/jest.config.js#L3

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

https://jestjs.io/docs/en/configuration#bail -номер - логический

Я бы попробуйте изменить bail: 0 (по умолчанию) и посмотреть, приведет ли это к ожидаемому поведению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...