rxviz/lib/observable-from-code.test.js
2018-07-01 10:18:37 -07:00

52 lines
1.3 KiB
JavaScript

import { Observable } from 'rxjs';
import { getObservableFromCode } from './observable-from-code';
const expectError = code => {
const result = getObservableFromCode(code);
expect(typeof result.error).toBe('string');
};
const expectObservable = code => {
const result = getObservableFromCode(code);
expect(result.error).toBeUndefined();
expect(result.observable$).toBeInstanceOf(Observable);
};
it('returns an error when there is a syntax error', () => {
expectError('syntax error here');
});
it('returns an error when there is no code', () => {
expectError(' ');
});
it('returns an error when the last expression is not an Observable', () => {
expectError('5');
});
it('handles a simple Observable', () => {
expectObservable('Rx.interval(1000)');
});
it('handles a higher order Observable', () => {
expectObservable('Rx.interval(1000).pipe(RxOperators.groupBy(x => x % 2))');
});
it('handles multiple statements', () => {
expectObservable(
`const first$ = Rx.Observable.create(observer => {
setTimeout(() => observer.next('1'), 1000);
setTimeout(() => observer.complete(), 3000);
});
const second$ = Rx.Observable.create(observer => {
setTimeout(() => observer.next('A'), 2000);
setTimeout(() => observer.complete(), 4000);
});
first$.pipe(RxOperators.merge(second$));
`
);
});