Angular Karma在启动时找不到任何测试文件,但在重新加载时会找到每个文件
我有一个有jasmine tests和Karma test runner的Angular 4项目。我从DavideViolantes starter()开始,并有过很好的经验,可以根据自己的需要对其进行更改 在过去的几天里,我花了大量的时间编写测试,并使用单独的Karma配置文件从我的模型中分别测试角度组件。我开始写模型测试,一切都很好。然后我编写了组件测试,它们也工作得很好。但是后来我注意到模型测试中有一个奇怪的行为 当我为模型测试运行Angular Karma在启动时找不到任何测试文件,但在重新加载时会找到每个文件,angular,jasmine,karma-runner,angular-cli,Angular,Jasmine,Karma Runner,Angular Cli,我有一个有jasmine tests和Karma test runner的Angular 4项目。我从DavideViolantes starter()开始,并有过很好的经验,可以根据自己的需要对其进行更改 在过去的几天里,我花了大量的时间编写测试,并使用单独的Karma配置文件从我的模型中分别测试角度组件。我开始写模型测试,一切都很好。然后我编写了组件测试,它们也工作得很好。但是后来我注意到模型测试中有一个奇怪的行为 当我为模型测试运行ng test时(明确给出了正确的karma.conf.j
ng test
时(明确给出了正确的karma.conf.js),找不到任何测试文件。webpack上下文对象为空,浏览器显示“0规格,0故障”
然后,如果我触摸一个关注的文件,网页上下文将加载所有测试文件,浏览器将显示每个测试
我唯一的猜测是有些事情发生得太晚了,因此第二轮比赛已经准备就绪
日志显示没有错误。配置文件与组件测试的配置文件基本相同
有调试技巧吗
karma.config.js:
module.exports = function (config) {
config.set({
basePath: '..',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
'karma-jasmine',
'karma-chrome-launcher',
'karma-jasmine-html-reporter',
'karma-coverage-istanbul-reporter',
'@angular/cli/plugins/karma',
],
client:{
clearContext: false
},
files: [
{ pattern: 'common/test.ts', watched: false }
],
preprocessors: {
'common/test.ts': ['@angular/cli']
},
mime: {
'text/x-typescript': ['ts','tsx']
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: config.angularCli && config.angularCli.codeCoverage
? ['progress', 'coverage-istanbul']
: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: true
});
};
import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare var __karma__: any;
declare var require: any;
__karma__.loaded = function () {};
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
const context = require.context('./', true, /\.spec\.ts$/);
context.keys().map(context);
__karma__.start();
测试。ts:
module.exports = function (config) {
config.set({
basePath: '..',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
'karma-jasmine',
'karma-chrome-launcher',
'karma-jasmine-html-reporter',
'karma-coverage-istanbul-reporter',
'@angular/cli/plugins/karma',
],
client:{
clearContext: false
},
files: [
{ pattern: 'common/test.ts', watched: false }
],
preprocessors: {
'common/test.ts': ['@angular/cli']
},
mime: {
'text/x-typescript': ['ts','tsx']
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: config.angularCli && config.angularCli.codeCoverage
? ['progress', 'coverage-istanbul']
: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: true
});
};
import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare var __karma__: any;
declare var require: any;
__karma__.loaded = function () {};
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
const context = require.context('./', true, /\.spec\.ts$/);
context.keys().map(context);
__karma__.start();
我也有类似的问题。我正在处理两个源文件夹。因此,我实现了上下文,以便在两个文件夹中搜索它
const context = require.context('../', true, /\/(@modules|src)\/.*\/.*\.spec\.ts$/);
若我正在启动ng测试,那个么只有来自“src”文件夹的测试才能运行。如果我通过观察程序再次启动测试,则会找到所有测试(src&@modules)
疯狂的是,在第三次重新加载和第四次重新加载时出现带有“错误”的中止,所有内容都会重新找到并运行。这两种情况会在每次重新加载时重复。我能否仅在每次“直接”运行时可靠地使用ng测试?在我的Jenkins环境中可能很难定义
顺便说一句,我可以完全复制相同的问题。基本上,只要测试不在默认的源文件夹中。在我的情况下,当我将die@modules文件夹移动到die src文件夹中时,它就会工作。请参阅:但如果我们可以使用多个源文件夹,它会更酷。