【问题标题】:How to test in Karma without require.context如何在没有 require.context 的情况下在 Karma 中进行测试
【发布时间】:2020-01-01 03:27:38
【问题描述】:

所以我在 React 领域花了很长时间,将 Jest 作为我的测试运行器/环境。 快进到新工作,我们正在对一个带有 Karma 的 Angular 8 应用程序进行单元测试。

令我沮丧的是,我找到了 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 中运行差异文件监视/测试吗?如果是这样,它是怎么做的???

有没有类似于 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',
    }

【问题讨论】:

    标签: angular karma-jasmine karma-runner karma-webpack


    【解决方案1】:

    我认为这里有三个解决方案:

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

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

    3) 使用fdescribefit 精确定位测试

    【讨论】:

    • 谢谢!所以这是我们的共同理解,那就是这是不可能的直接业力? fdescribe 和 fit 可以工作,但你不必绕过 webpack 不得不做任何昂贵的魔法来重建 require.context。
    • 我在上面添加了一个小的 karma sn-p,我可以轻松更改 files 数组以让它读取所有测试,但问题是设置代码。
    • 我想切换到 Jest,甚至是 Wallaby(将进一步研究),但我不喜欢重写或触摸每个测试文件的想法;我们当前的解决方案“有效”,但我想如果我可以进行一些配置更改并使 tdd 体验更好,我会接受 o_O
    • 恐怕没有,它有一个未解决的问题,但自 2017 年以来没有任何进展。如果您希望增强您的体验并尽可能少地进行更改,我可以推荐 Wallaby。它应该开箱即用。
    • 我也会指出,如果它是一个全新的项目,也许值得考虑使用 Bazel 而不是 Webpack。一旦你的第一个慢速构建成功,其余的就会非常快。
    猜你喜欢
    • 2014-07-29
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多