我具有以下文件结构:
-
projects
-
myproj
-Angular应用 -
myproj-lib
-角库
-
-
shared
-共享代码,在应用程序和库中都使用
两个项目(App和Lib)都是使用Angular CLI构建的(到目前为止,除了codeCoverage
选项之外,angular.json均未更改)。我无法运行shared
目录中的测试:
- 对于该应用,测试可以正常运行,但是覆盖范围仅包括项目文件(位于
projects/myproj/src
下的文件) - 对于库测试,它总是在TypeScript编译中缺少
Error: \TRUNCATED_PATH\shared\components\component-dir\component.ts
的情况下中断
我认为该应用程序的问题在于,尽管测试(甚至最终报告)包括这些内容,但覆盖率报告程序仍未看到shared
目录(它仅显示来自src
该项目)
对于库,我想这是有关Karma如何解析路径以便Typescript可以看到它们的事情。
我的test.ts
文件(仅添加了其他路径):
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone-testing-bundle';
import { getTestBed } from '@angular/core/testing'; // tslint:disable-line
import {
BrowserDynamicTestingModule,platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First,initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,platformBrowserDynamicTesting()
);
// Then we find all the tests.
const projectContext = require.context('./',true);
const sharedContext = require.context('../../../shared',true);
// And load the modules.
sharedContext.keys().map(sharedContext);
projectContext.keys().map(projectContext);
我的karma.conf.js
:
// Karma configuration file,see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '../../shared',frameworks: ['jasmine','@angular-devkit/build-angular'],plugins: [
require('karma-jasmine'),require('karma-chrome-launcher'),require('karma-mocha-reporter'),require('karma-jasmine-html-reporter'),require('karma-coverage-istanbul-reporter'),require('@angular-devkit/build-angular/plugins/karma')
],client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},coverageIstanbulReporter: {
dir: require('path').join(__dirname,'../coverage'),reports: ['html','lcovonly','text-summary'],fixWebpackSourcePaths: true
},reporters: ['mocha'],mochaReporter: {
ignoreSkipped: true
},port: 9876,colors: true,logLevel: config.LOG_INFO,autoWatch: true,browsers: ['ChromeHeadless'],singleRun: false,});
};
我的tsconfig.spec.json
(我试图修改路径,但没有帮助):
{
"extends": "../../tsconfig.json","compilerOptions": {
"baseUrl": "../../","rootDir": "../../","outDir": "../../out-tsc/spec","types": [
"jasmine","node"
],"module": "esnext","inlinesources": true,"emitDecoratorMetadata": true,"experimentalDecorators": true,"resolveJsonmodule": true,"esModuleInterop": true,"importHelpers": true,"preserveSymlinks": true
},"include": [
"./src/**/*.ts","./src/**/*.spec.ts","../../shared/**/*.ts","../../shared/**/*.spec.ts"
],"exclude": []
}
有什么想法吗?