测试 无法在resetFakeAsyncZone读取未定义的属性'assertPresent'

Dav*_*bec 4 testing karma-runner zone.js angular

我对业力v1.4有问题。测试框架。我所有的单元测试现在都因错误而失败Cannot read property 'assertPresent' of undefined at resetFakeAsyncZone

我已经在寻找解决方案并对其进行了测试,但不幸的是,没有任何帮助。解决方案建议我应该更改test.js文件中的导入顺序。我已经做到了。

这是我正在使用的建议顺序,但仍然失败:

import 'zone.js/dist/zone.js'; // 1st
import 'zone.js/dist/async-test'; // 2nd
import 'zone.js/dist/fake-async-test'; // 3rd
import 'zone.js/dist/long-stack-trace-zone'; // 4th
import 'zone.js/dist/sync-test'; // 5th
import 'zone.js/dist/proxy.js'; // 6th
import 'zone.js/dist/jasmine-patch'; // 7th
Run Code Online (Sandbox Code Playgroud)

PS:我使用的是VS Code,它现在在保存文件时自动对导入进行排序,从而更改了我的自定义导入顺序,在这种情况下,这非常烦人。我不知道如何仅针对特定文件禁用它,因此我必须在记事本中编辑test.js文件。

jia*_*ion 9

使用哪个版本zone.js

在的较新版本中zone.js,无需分别加载每个测试库

将以下内容放在的顶部test.ts

import 'zone.js/dist/zone-testing';
Run Code Online (Sandbox Code Playgroud)

注意:此导入在任何其他导入之前都非常重要!

  • 相同的区域版本有同样的问题。解决方案不是在 test.ts 中重新排序导入:将 `import 'zone.js/dist/zone-testing';` 放在所有其他导入之前。 (3认同)
  • “在顶部”真的很重要 (2认同)

Fat*_*med 1

这是订单,您可以添加以下内容:

// tslint:disable-next-line:ordered-imports
Run Code Online (Sandbox Code Playgroud)

禁用下一行的导入顺序

import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy.js';
import 'zone.js/dist/sync-test';
// tslint:disable-next-line:ordered-imports
import 'zone.js/dist/jasmine-patch';
// tslint:disable-next-line:ordered-imports
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
Run Code Online (Sandbox Code Playgroud)

或为该块禁用它

// tslint:disable:ordered-imports
 import 'zone.js/dist/long-stack-trace-zone';
 import 'zone.js/dist/proxy.js';
 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';
Run Code Online (Sandbox Code Playgroud)

并像这样运行测试以查看确切的错误:

ng test -sm=false
Run Code Online (Sandbox Code Playgroud)