Geo*_*rds 15 unit-testing jasmine socket.io typescript angular
我试图在我的应用程序中单元测试角度服务,这将创建socket.io客户端.我的服务看起来像这样:
export class SocketService {
private name: string;
private host: string = window.location.protocol + "//" + window.location.hostname + ":3000";
socket: io.Socket;
constructor() { }
subscribeEvent(name: string): Observable<IJobResp> {
this.setup(name);
return new Observable(observer => {
this.socket.on('job', val => observer.next(val))
})
}
private setup(name: string) {
this.name = name;
let socketUrl = this.host + "/" + this.name;
this.socket = io.connect(socketUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
所以要编写我的测试,我使用mock-socket库来设置一个mock socket.io服务器.这是测试的样子:
describe('SocketService', () => {
let socket;
const mockServer = new Server('http://localhost:3000/');
mockServer.on('connection', server => {
mockServer.emit('job', 'test message 1');
});
(window as any).io = SocketIO;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [JobService]
});
});
it('should xyz, inject([JobService], fakeAsync((service: JobService) => {
service.subscribeEvent('/').subscribe(val => {
expect(val).toEqual('test message 1');
})
})));
});
Run Code Online (Sandbox Code Playgroud)
但是,该测试会引发错误:
错误:无法在假异步测试中制作XHR.
如果我没有fakeAsync
,那么测试在处理中的断言之前通过subscribe()
.
我该如何解决这个问题?
我尝试过的另一种方法是使用async
eg
it('should subscribe to dwnTime events', async(inject([JobService], (service: JobService) => {
service.subscribeEvent('line/602').subscribe(val => {
expect(val).toEqual('test 2');
})
})));
Run Code Online (Sandbox Code Playgroud)
然后我得到:
错误:超时 - 在jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时内未调用异步回调.
这看起来像是一个时间问题,但我仍然不确定为什么?
归档时间: |
|
查看次数: |
1247 次 |
最近记录: |