迁移到 Angular 15 后,上下文已从 test.ts 中删除

dig*_*lok 13 karma-jasmine angular

在我们的项目中,为了减少运行测试的数量,并且在开发过程中仅针对某些文件运行特定测试,我们使用了我们自己的脚本和此技术:

StackOverflow 上的一个答案,得分为 124。答案的正文详细介绍了如何将测试的通配符匹配器替换为仅匹配单个测试的匹配器。

然而,在迁移到 Angular 15 后,这个“上下文”内容已从 test.ts 文件中删除。

有没有办法在 Angular 15 中仍然使用相同的技术?

我尝试将“上下文”返回到 test.ts,但没有成功。

som*_*one 6

简单的解决方案:只需删除对require.context

我刚刚遇到了同样的问题,将应用程序从 Angular 14 转换为 15,结果发现解决方案更简单:只需删除src/test.ts. require.context()不再需要调用。

我曾经有

const context = require.context("./", true, /\.spec\.ts$/);
context.keys().forEach(context);
Run Code Online (Sandbox Code Playgroud)

在末尾src/test.ts,但现在我删除了这两行,我的测试都像以前在 Angular 14 中一样运行。

我无法找到有关此更改的正确文档(这就是我首先提出这个问题的原因),但我的假设是 Karma 现在会自动查找所有文件*.spec.ts,我们不再需要指示它这样做。

缩小测试套件范围"include"

仅当您想要限制要运行的规范文件列表时,才需要在/"include"下添加该属性。"test":"options":

所以,根据我的测试,配置angular.json如下:

   "test": {
     "options": {
        "include": ["**/*.spec.ts"],
        ...
     },
     ...
Run Code Online (Sandbox Code Playgroud)

或相同,没有"include",所有规范文件都会被执行。

但配置angular.json是这样的:

   "test": {
     "options": {
        "include": ["**/app.component.spec.ts"],
        ...
     },
     ...
Run Code Online (Sandbox Code Playgroud)

只有规范文件调用app.component.spec.ts才真正得到执行。

我不知道您为什么要限制执行哪些规范文件,但我认为值得在这里记录下来以了解发生了什么。

  • 我已经删除了 test.ts 文件及其在 angular.json (“main”)中的引用。但现在规范说:“错误:fakeAsync() 测试助手需要 zone-testing.js,但找不到。请确保您的环境包含 zone.js/testing`。这通常是由 test.ts 解决的 (3认同)

Mr.*_*ash 5

test.ts 文件不再由 Angular 生成,并且mainAngular.json 中不再允许使用用于链接该文件的属性,您可以使用 Angular.json 中的 include 属性来添加模式或文件名

"test": {
  ...
  "options": {
    "include": [
      "**/app.component.spec.ts"
    ]
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)