Reputation: 245
Trying to run a simple effects test with an existing and recently migrated Angular 7 project. But I get error as below.
Error: No test scheduler initialized at getTestScheduler (node_modules/jasmine-marbles/es6/src/scheduler.js:11:1) at new TestHotObservable (node_modules/jasmine-marbles/es6/src/test-observables.js:21:39) at Module.hot (node_modules/jasmine-marbles/es6/index.js:7:1)
My code in effects spec file is basic standard check with jasmine-marbles.
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);
Has anyone seen and resolved this error before?
Upvotes: 3
Views: 3434
Reputation: 2117
In my case the reason for the No test scheduler initialized
error was using cold
outside the beforeEach
block.
Creating the test observables inside the beforeEach
block solved the problem.
Upvotes: 1
Reputation: 245
Although changing to ES5 fixed the problem, my colleague has come up with a better solution. Solution is to add the following lines in src/test.ts file. I like it better as it allows to continue testing in 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();
});
Upvotes: 9
Reputation: 245
After further research figured out that it was due to compiler options in tsconfig.spec.json. Originally it was setup as "target": "es6", changing it to es5 fixed this issue and specs are successfully running now.
Upvotes: 0