Ngrx Effects规范因“未初始化测试计划程序”而引发错误

时间:2019-03-18 13:13:56

标签: angular angular7 ngrx-effects jasmine-marbles

尝试对现有的和最近迁移的Angular 7项目运行简单的效果测试。但是我收到如下错误。

错误:未初始化测试计划程序             在getTestScheduler(node_modules / jasmine-marbles / es6 / src / scheduler.js:11:1)             在新的TestHotObservable(node_modules / jasmine-marbles / es6 / src / test-observables.js:21:39)             在Module.hot(node_modules / jasmine-marbles / es6 / index.js:7:1)

我的效果规范文件中的代码是使用茉莉花大理石进行的基本标准检查。

const action = new Load(request);
const completion = new LoadSuccess(result);

actions$ = hot('-a-', { a: action});
const response = cold('-a|', {a: result});
const expected = cold('--b', {b: completion});
service.getSomething.and.returnValue(result);
expect(effects.load$).toBeObservable(expected);

以前有没有人看到并解决过此错误?

3 个答案:

答案 0 :(得分:3)

将茉莉花大理石升级到0.6.0为我解决了这个问题。

答案 1 :(得分:1)

尽管改用ES5可以解决此问题,但我的同事却提出了更好的解决方案。解决方案是在src / test.ts文件中添加以下行。我更喜欢它,因为它可以继续在ES6中进行测试。

import { addMatchers, getTestScheduler, initTestScheduler, resetTestScheduler } from 'jasmine-marbles';

// configure matchers for jasmine-marbles
jasmine.getEnv().beforeAll(() => {
  return addMatchers();
});
jasmine.getEnv().beforeEach(() => {
 initTestScheduler();
});
jasmine.getEnv().afterEach(() => {
 getTestScheduler().flush();
 resetTestScheduler();
});

答案 2 :(得分:0)

经过进一步研究,发现这是由于tsconfig.spec.json中的编译器选项引起的。最初将其设置为“目标”:“ es6”,将其更改为es5可以解决此问题,并且规格现在可以成功运行。