如何在没有 require.context 的情况下在 Karma 中进行测试

How to test in Karma without require.context

所以我在 React 领域花了很长时间,Jest 作为我的测试 runner/environment。 快进到新工作,我们正在对一个 Angular 8 应用 w/Karma 进行单元测试。

令我沮丧的是,我找到了 Angular 的默认配置,那里的每一个指南都建议接近这一行的内容:

const context = require.context('../src/app', true, /\.spec\.ts$/);

所以当我在我的应用程序中更新文件时,Angular CLI/Webpack 必须重建任何东西,然后它重新执行我的整个 f-ing 测试套件,这是数千个测试,再次.

我环顾四周,发现 Karma 理解查找和监视文件的概念,但似乎这种方法永远行不通。

问题是我们需要运行此代码来设置环境:

import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import 'core-js/proposals/reflect-metadata';

import { getTestBed } from '@angular/core/testing';
import {
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting,
} from '@angular/platform-browser-dynamic/testing';

declare const require: any;

getTestBed().resetTestEnvironment();
getTestBed().initTestEnvironment(
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting()
);

有人在 Angular w/ Karma 中观看/测试 运行ning 的差异文件吗?如果有,它是怎么做到的???

是否有一种简单的方法来运行此设置代码类似于 Jest 的 setupFilesAfterEnv

相关Karma配置(我没有使用NG CLI,test.ts上面有内容):

    frameworks: ['parallel', 'jasmine'],

    plugins: [
      require('ts-loader'),
      require('karma-jasmine'),
      require('karma-webpack'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-spec-reporter'),
      require('karma-parallel'),
    ],

    files: [{ pattern: './test/index.ts', watched: false }],

    preprocessors: {
      './test/index.ts': ['webpack'],
    },
    webpack: karmaConfig(),

    webpackMiddleware: {
      stats: 'errors-warnings',
    }

我认为你有三种解决方案:

1) 使用 Jest 代替 Angular 测试 (It's possible!)

2) 使用 WallabyJS 可以在幕后 运行 并且只执行更改的测试。我们使用它,它非常好。

3) 使用 fdescribefit 精确定位测试