3

angular 4 から 7 に更新しました。コード カバレッジ レポートを生成しようとすると、「ng test」コマンドはすべてのテスト ケースを適切に実行し、すべてのテスト ケースに合格しましたが、「ng test --code-coverage」は適切なレポートを生成していません。

生成される正しいレポートは次のとおりです。 ファイル polyfills.ts

実際のレポートには、すべての .ts ファイル report と html レポートがカバレッジ フォルダーに含まれている必要があります example ファイル
デモ スクリプト src/business

設定は以下の通りです。

   angular.json - 
   "test": {
      "builder": "@angular-devkit/build-angular:karma",
      "options": {
        "codeCoverage": true,
        "main": "scripts/test.ts",
        "karmaConfig": "karma.conf.js",
        "polyfills": "demo/polyfills.ts",
        "tsConfig": "src/tsconfig.spec.json",

 tsconfig.spec.json - 
 "files": [
 "../scripts/test.ts",
 "../demo/polyfills.ts"
 ],
 "include": [
  "**/*.spec.ts"
 ]

 test.ts -
 const context = require.context('../src', true, /\.spec\.ts$/)

修理:

  1. 次のパッケージを package.json の devDependencies に追加します。"@angular-devkit/build-ng-packagr": "~0.6.3", b. "ng-packagr": "^3.0.0-rc.2"

  2. npm install (または yarn install) を実行します

  3. 次のように、angular.json のプロジェクトの下に src フォルダーの新しいエントリを作成します。

                    "ui-demo-lib": {  // name of library project, in this case for UI_Reports
                          "root": "",
                          "sourceRoot": "src", // root path of 
                          "projectType": "library",
                          "prefix": "lib",
                          "architect": {
                            "build": {
                              "builder": "@angular-devkit/build-ng-packagr:build",
                              "options": {
                                "tsConfig": "src/tsconfig.featurelib.json",
                              }
                            },
                            "test": {
                              "builder": "@angular-devkit/build-angular:karma",
                              "options": {
                                "main": "src/../scripts/test.ts", 
                                "tsConfig": "src/tsconfig.spec.json", 
                                "karmaConfig": "src/../karma.conf.js", 
                                "styles": [
                                  "demo/styles/main.scss",
                                  "node_modules/ngx-toastr/toastr.css",
                                ],
                                "stylePreprocessorOptions": {  // specific to UI_Demo
                                  "includePaths": [
                                    "node_modules"
                                  ]
                                }
                              }
                            },
                            "lint": {
                              "builder": "@angular-devkit/build-angular:tslint",
                              "options": {
                                "tsConfig": [
                                  "src/tsconfig.featurelib.json",
                                  "src/tsconfig.spec.json"
                                ],
                                "exclude": [
                                  "**/node_modules/**"
                                ]
                              }
                            }
                          }
                        }
    

この新しいエントリに関する注意:

• Angular CLI では、プロジェクトの下のすべてのファイル パスが sourceRoot パスで始まる必要があります。例: メインの test.ts ファイルが scripts/test (親レベル) にある場合、テスト オプションのメイン属性は src/../scripts/test.ts を指す必要があります。• angular.json の projects プロパティの外で、defaultProject プロパティをデモ アプリケーションに設定してください。src/ フォルダーが ui-demo-lib の場合、demo/ フォルダーは ui-demo になります。このようにして、既存のビルド関数は壊れません。

  1. リポジトリの test.ts ファイルで、すべてのインポートを削除し、次のものに置き換えます。

             import 'core-js/es7/reflect';
             import 'zone.js/dist/zone';
             import 'zone.js/dist/zone-testing';
             import { getTestBed } from '@angular/core/testing';
             import {
               BrowserDynamicTestingModule,
               platformBrowserDynamicTesting
             } from '@angular/platform-browser-dynamic/testing';
    

すべての手順を完了したら、必要に応じて追加のインポートを 1 つずつ追加してみてください。ただし、Angular 7 のテスト環境では上記のモジュールが必要です。他のモジュールは、いずれかのゾーン ファイルが使用されている場合 (async-testing など) にのみインポートする必要があります。次のモジュールは、リポジトリに関係なく互換性がなくなりました: • zone.js/dist/jasmine-patch

注: テストを指すパスが、テスト ファイルの場所に対して相対的であることを確認してください。UI_Demo は scripts/test.ts に test.ts ファイルがあるため、require.context('../src')

  1. src/tsconfig.spec.json で、files 属性に以下が含まれていることを確認します。a. test.ts ファイルの場所 (相対) b. polyfills.ts ファイルの場所 (相対、通常は demo フォルダーにあります)
  2. package.json 内: ng-test を使用するすべてのスクリプトを ng-test –project を使用するように変更します。b. PhantomJS への参照を置き換えて、代わりに ChromeHeadless を使用します。PhantomJS は、angular CLI V7 を介したカルマでは機能しません。c. 元。ng test –browsers=PhantomJS ------- ng test --project ui-demo-lib --browsers=ChomeHeadless
  3. オプション - tsconfig.spec.ts で、エントリ「**/ .d.ts」を include プロパティに追加します。
  4. 次のコマンドをテストします。ng test --project b. ng test --project --watch=false --browsers=ChromeHeadless –code-coverage c. gulp build-inline d. ng build --aot --output-path=dist (デフォルトでデモをビルドする必要があります)
4

0 に答える 0