【发布时间】:2017-05-18 12:33:37
【问题描述】:
我有一个带有 jasmine 测试和 Karma 测试运行器的 Angular 4 项目。我从 DavideViolantes 启动器 (github) 开始,并且有很好的经验来改变它以满足我的需求。
最近几天我花了很多时间编写测试,我使用单独的 Karma 配置文件将 Angular 组件与我的模型分开测试。我开始编写模型测试,一切正常。然后我编写了组件测试,它们也运行良好。但后来我注意到模型测试中有一个奇怪的行为。
当我运行 ng test 进行模型测试(明确给出正确的 karma.conf.js)时,没有找到测试文件。 webpack 上下文对象为空,浏览器显示“0 specs, 0 failures”。
如果我随后触摸一个监视文件,webpack 上下文会加载所有测试文件,并且浏览器会显示每个测试。
我唯一的猜测是某些事情发生得太晚了,因此已经准备好进行第二次运行。
日志显示没有错误。配置文件与组件测试的配置文件基本相同。
有什么调试技巧吗?
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
});
};
test.ts:
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();
【问题讨论】:
标签: angular jasmine karma-runner angular-cli