私はJestを使用してangularアプリをテストしていますが、簡単なテストの実行には非常に長い時間がかかり、理由を理解できないようです。
package.json
でのJestのセットアップ:
"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();
});
});
また、AngularプロジェクトでJestを使用していますが、それが良い解決策かどうかはわかりません。
テストモジュールを構成するときに、NO_ERRORS_SCHEMA
ネストされたすべてのコンポーネントをdeclarations
に追加して、テストするコンポーネントをコンパイルする必要はありません。
beforeEach(async () => {
return TestBed.configureTestingModule({
declarations: [
MyComponent
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
});
Jestでのテストは単体テストであるため、そのソリューションではコンポーネントのみをテストします。コンポーネント間の相互作用をテストする場合は、ProtractorまたはPuppeteerを使用してエンドツーエンドのテストを行います。
最終的には、Angularチームからの回答が必要だと思います。platformBrowserDynamicTestingのドキュメントはまばらです(- https://angular.io/api/platform-browser-dynamic/ testing/platformBrowserDynamicTesting )。
おそらく、platformBrowserDynamicTestingはブラウザをエミュレートし、アプリケーションのDOM全体をメモリにロードします。この場合、Angularアプリケーション(キャッシュされたJavaScriptなし)の場合、ほぼ10秒のランプアップが妥当と思われます。 6ミリ秒で実行されており、「高速テスト」の要件を満たしているようです。別の単純な「高速2」テストを追加すると、テストにかかる時間を確認できます。 10秒未満は、Angular platformBrowserDynamicTestingユーティリティのランプアップと比較して、実際のテストにかかる時間が非常に短いことを示しています。