3

我已经使用 angular CLI (v6.1.4) 通过运行在我的组件文件夹中生成了一个组件,ng g c components/foo然后运行ng test​​. 新组件的测试失败并出现以下错误:

async() 测试助手需要区域,但找不到。请确保您的环境包含 zone.js/dist/zone.js 抛出

错误:非法状态:无法加载指令 FooComponent 的摘要。

奇怪的是,如果我运行ng g c foo(即它不是在组件文件夹中生成的),那么测试就会通过。我的测试都适用于其他文件夹,但这是我的组件文件夹中的第一个测试(也是组件的第一个测试)。其他测试都不是异步的。

我还很陌生,ng test所以我可能会遗漏一些非常明显的东西。我没想到需要设置任何东西zone.js才能运行默认测试。我应该在哪里配置这个?还是我在这里缺少其他东西,也许是我的components文件夹特有的东西?

4

3 回答 3

5

将以下内容添加到foo.component.spec.ts解决问题的顶部,但我仍然不明白为什么如果测试不在components文件夹中,它们为什么会起作用。如果有人有一个解释,或者一个不涉及在每个组件的测试文件中重复这个的解决方案,我很想听听!

import 'zone.js';
import 'zone.js/dist/async-test.js';
import 'zone.js/dist/proxy.js';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
于 2018-09-27T11:26:00.630 回答
4

在我的例子中,我想知道我的项目是否可能是使用不同版本的主测试配置生成的,所以我用 Angular CLI 创建了一个新的空项目,比较了两个版本,src/test.ts我意识到这个文件确实不同,我的app 缺少以下行作为第一行:

import 'zone.js/dist/zone-testing'

将其添加到src/test.ts文件后,此错误消失了!

正如蒂姆的回答所暗示的那样,这可能比将所有这些 js 文件导入所有规范要好得多。

于 2019-08-16T11:43:24.517 回答
0

除了上面的@BrunoJCM 评论,它通过组织test.ts文件中的导入解决了我的问题,请记住,您项目中的以下设置可能会让您再次遇到问题,因此关于test.ts文件,请检查以下内容

  1. 停用 onSave 优化导入。
  2. 避免运行PrettierBeautify或其他重新组织导入(包或插件)的代码样式格式化程序。
  3. 检查像Husky这样格式化文件并重新组织导入的预提交钩子。

享受无忧编码!:D

于 2021-08-16T05:05:17.687 回答