我正在尝试测试侦听套接字并发布消息的类 我需要模拟socket.io吗?如果是,我该怎么办? 如何测试“打开”功能
我的课,我想测试:
export class DataObservableService {
public observable$: Observable<fata[]>;
private subject$: Subject<data[]>;
constructor(
private socketService: ISocketIo,
) {
this.subject$ = new Subject<data[]>();
this.observable$ = this.subject$.asObservable();
}
async init(): Promise<void> {
const server = await this.socketService.getSocket();
server.on('data', (val: data[]) => {
this.subject$.next(val);
});
}
}
套接字连接功能
async connect(): Promise<SocketIOClient.Socket> {
this.server = io('/'});
this.resolveServer(this.server);
return this.server;
}
测试我有三叉戟,它不起作用
使用套接字模拟
const fakeURL = 'ws://localhost:8080';
const mockServer = new Server(fakeURL);
window.io = SocketIO;
mockServer.on('connection', socket => {
socket.on('message', (data: any) => {
socket.emit('data', 'string');
console.log('emittttt')
});
});
window.io.connect(fakeURL);
其中:
socket = mockServe. // mock server from above
socketMock.getSocket = jest.fn(() => Promise.resolve(socket)); mock the function that return socket then server.on will work (but i gess no)
dataObservable.observable$.subscribe(value => {
console.log(value); // not working
expect(value).toBeDefined();
});
也尝试过这个:
await new Promise((resolve, reject) => {
dataService.observable$.subscribe(value => {
resolve(value);
});
});
得到了
: Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Error: