在测试中使用 fakeAsync 会导致 Angular 4 和 Zone.js 出错

ger*_*ard 2 jasmine webpack zone.js angular

我使用的角度4.3.1zone.js 0.8.14与我跑我的测试,与karmawebpack和跨在我的测试中这个奇怪的错误来了,每当我使用fakeAsync并勾选与时间相关的测试。

测试用例:

it('should call the function which is given as parameter', fakeAsync(() => {
  autoRefreshService.start();
  expect(spyFn).not.toHaveBeenCalled();
  tick(1);
  expect(spyFn).toHaveBeenCalled();
}));
Run Code Online (Sandbox Code Playgroud)

测试调用文件:

require('core-js/es6');
require('core-js/es7/reflect');
require('zone.js/dist/zone');
require('zone.js/dist/long-stack-trace-zone');
require('zone.js/dist/proxy');
require('zone.js/dist/sync-test');
require('zone.js/dist/jasmine-patch');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');
import { TestBed } from '@angular/core/testing';
import {
    BrowserDynamicTestingModule,
    platformBrowserDynamicTesting,
} from '@angular/platform-browser-dynamic/testing';

TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
const context = (require as any).context('./', true, /\.spec\.ts$/);
context.keys().map(context);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Chrome 59.0.3071 (Mac OS X 10.12.5) CallbackRepeaterService start should not start if no callback set FAILED
    TypeError: Right-hand side of 'instanceof' is not an object
        at Object.<anonymous> (src/test.ts:25139:49)
        at ZoneDelegate.invoke (src/test.ts:86299:26)
        at ProxyZoneSpec.onInvoke (src/test.ts:88697:39)
        at ZoneDelegate.invoke (src/test.ts:86298:32)
        at Zone.run (src/test.ts:86049:43)
        at Object.<anonymous> (src/test.ts:88992:34)
        at ZoneQueueRunner.jasmine.QueueRunner.ZoneQueueRunner.execute (src/test.ts:89020:42)
Run Code Online (Sandbox Code Playgroud)

错误消息必须与 相关fakeAsync,因为如果我删除它,它不会抱怨。

这里可能是什么问题?

ger*_*ard 5

所以问题是我需要添加import 'zone.js/dist/fake-async-test';到测试入口文件中。