Angular 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

我有一个有jasmine tests和Karma test runner的Angular 4项目。我从DavideViolantes starter()开始,并有过很好的经验,可以根据自己的需要对其进行更改

在过去的几天里,我花了大量的时间编写测试,并使用单独的Karma配置文件从我的模型中分别测试角度组件。我开始写模型测试,一切都很好。然后我编写了组件测试,它们也工作得很好。但是后来我注意到模型测试中有一个奇怪的行为

当我为模型测试运行
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文件夹中时,它就会工作。请参阅:但如果我们可以使用多个源文件夹,它会更酷。