Jest - Простые тесты медленны
Я использую Jest для тестирования углового приложения, и для выполнения простых тестов требуется очень много времени, и я не могу понять, почему.
Моя настройка Jest в package.json
:
"jest": {
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules"
],
"testPathIgnorePatterns": [
".git/.*",
"node_modules/.*"
],
"transformIgnorePatterns": [
"node_modules/.*",
".*\\.js"
],
"setupTestFrameworkScriptFile": "<rootDir>/src/setupJest.js",
"preset": "jest-preset-angular",
"testEnvironment": "jsdom",
"testRegex": "src/app/.*\\.spec\\.ts$",
"moduleFileExtensions": [
"ts",
"js",
"json"
],
"verbose": true,
"cacheDirectory": ".jest-cache",
"coveragePathIgnorePatterns": [
".*\\.(shim\\.ngstyle|ngfactory)\\.ts"
],
"globals": {
"ts-jest": {
"tsConfigFile": "./tsconfig.json"
},
"__TRANSFORM_HTML__": true
}
}
Мой установочный файл Jest:
'use strict';
require('core-js/es6/reflect');
require('core-js/es7/reflect');
require('zone.js');
require('zone.js/dist/proxy.js');
require('zone.js/dist/sync-test');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');
require('jest-zone-patch');
const getTestBed = require('@angular/core/testing').getTestBed;
const BrowserDynamicTestingModule = require('@angular/platform-browser-dynamic/testing').BrowserDynamicTestingModule;
const platformBrowserDynamicTesting = require('@angular/platform-browser-dynamic/testing') .platformBrowserDynamicTesting;
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
Вот мой простой тест:
fdescribe('RichTextEditorComponent', () => {
it('should be fast', () => {
expect(true).toBeTruthy();
});
});
Кто-нибудь знает, почему это занимает 9+ секунд? ![enter image description here]()
Ответы
Ответ 1
Я также использую Jest в своем проекте Angular, и я не уверен, что это хорошее решение.
Когда вы конфигурируете свой модуль тестирования, вы можете использовать NO_ERRORS_SCHEMA
и вам не нужно добавлять все вложенные компоненты в declarations
для компиляции компонента, который вы хотите протестировать.
beforeEach(async () => {
return TestBed.configureTestingModule({
declarations: [
MyComponent
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
});
Ваши тесты с Jest - это модульные тесты, поэтому с этим решением вы будете тестировать только свой компонент. Если вы хотите проверить взаимодействие между компонентами, вы будете выполнять сквозные тесты с Protractor или Puppeteer.
Ответ 2
Я думаю, что ответ в конечном итоге должен прийти от команды Angular. Документация для platformBrowserDynamicTesting немногочисленна (https://angular.io/api/platform-browser-dynamic/testing/platformBrowserDynamicTesting).
Возможно, platformBrowserDynamicTesting эмулирует браузер и загружает весь DOM для вашего приложения в память. В этом случае разумное увеличение скорости приложения Angular на 10 секунд (без какого-либо кэшированного JavaScript). Возможно, я неверно истолковываю это, но, согласно вашим отчетам, похоже, что настоящий тест выполняется за 6 миллисекунд, что, по-видимому, должно соответствовать вашему требованию "быстрого теста". Мне было бы интересно узнать, сколько времени займет тестирование, если вы добавите еще один простой тест "должно быть быстро 2". Если общее количество по-прежнему меньше 10 секунд, это говорит о том, что ваши реальные тесты занимают очень мало времени по сравнению с развертыванием утилиты Angular platformBrowserDynamicTesting.