【问题标题】:Karma finds no test files on start but finds every file when reloadingKarma 在启动时找不到测试文件,但在重新加载时找到每个文件
【发布时间】: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


    【解决方案1】:

    我也遇到了类似的问题。我正在使用两个源文件夹。因此,我实现了上下文,以便在两个文件夹中搜索它。

    const context = require.context('../', true, /\/(@modules|src)\/.*\/.*\.spec\.ts$/);
    

    如果我开始 ng 测试,只有来自 'src' 文件夹的测试会被找到运行。如果我通过观察者再次开始测试,则会找到所有测试(src & @modules)。

    这太疯狂了,第三次重新加载时出现“错误”的中止,而第四次重新加载时,一切都再次被发现并运行。这两个条件在每次重新加载时重复。我可以只在每次“直接”运行时可靠地使用 ng test 吗?在我的 Jenkins 环境中可能很难定义。

    顺便说一句,我可以完全复制同样的问题。基本上只要测试不在默认源文件夹中。

    【讨论】:

    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多