[英]rxjs jest Mocking object in stream
嗨,我尝试测试此代码
import { Observable, Subscriber } from 'rxjs';
function getJavaRequest<T>(globals: any): (name: string) => Observable<T> {
return (name: string) => Observable
.create((observer: Subscriber<T>) => {
globals[name] = (event: T) => observer.next(event);
});
};
我正在使用笑话框架。 我想开玩笑地创建模拟对象,并检查该函数创建流并向流中添加一些东西,我有这样的东西
import {getJavaRequest } from './JcefStreams';
import { TestScheduler } from 'rxjs/testing';
test('It should return mocked object from stream', () => {
const testObject = jest.mock();
let test;
getJavaRequest(testObject).subscribe(e: any => e == test);
expect(test).toBe(global);
});
但是它不能正常工作
您需要创建一个模拟的可观察对象。
例如:
//...
import { of } from 'rxjs/observable/of';
class RequestServiceMock {
get = jest.fn();
}
describe('', () => {
it('', () => {
const requestService = RequestService as RequestServiceMock;
requestService.get.mockReturnValue(of([]));
requestService.get().subscribe(_ => expect(_).toBeTruthy())
});
});
希望这会有所帮助。
基于https://blog.jiayihu.net/testing-observables-in-rxjs6/的解决方案
describe('Check that getJavaRequest create observable with event', () => { let scheduler: TestScheduler; beforeEach(() => { scheduler = new TestScheduler(assertDeepEqual); }); test('', () => { let testObject: {[name: string]: ((event: string) => void)} = {}; const subscriber = jest.fn(); const stremUnderTests = getJavaRequest<string>(testObject)('testStream').subscribe(subscriber); testObject.testStream('a'); testObject.testStream('b'); expect(subscriber).toHaveBeenCalledWith('a') expect(subscriber).toHaveBeenCalledWith('b') expect(subscriber).toHaveBeenCalledTimes(2) }); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.