【发布时间】:2021-11-12 20:07:15
【问题描述】:
我需要为以下代码编写一个单元测试:
getSomething(id: string): Observable<State | null> {
return new WebSocketSubject(webSocket(`ws://<websocket>`)
.pipe(
catchError(err => {
console.error('Error in WebSocket connection: ', err);
return concat(
of(null),
throwError(err)
);
}),
retryWhen(errors =>
errors.pipe(
delay(1000)
)
)
)
);
}
我想写两个测试:
- 检查websocket是否创建;
- 在 websocket 连接中生成错误以实现良好的覆盖。
我写了第一个测试如下,但我不知道这里会发生什么:
it('should get Something create websocket', () => {
service.getSomething('test').subscribe(
data => expect(data).toBeInstanceOf(webSocket),
fail
);
});
欢迎您的意见。谢谢。
【问题讨论】:
-
单元测试意味着你想检查你的代码是如何工作的。但是“检查是否创建了websocket”意味着检查运行时(可能是浏览器,但在测试期间可能是NodeJS)是否支持websockets,它实际上是创建的,它连接到外部服务等——这是功能性的/集成测试,可能不是您想要在单元测试中做的事情。话虽如此,您可以通过注入一些自定义工厂来抽象 websocket 的创建,这些工厂在您的测试中被一个简单的主题覆盖,同时在应用程序运行时仍然使用
WebSocketSubject。 -
我明白了,你能指出一些对我有帮助的例子吗?感谢您的评论。
标签: angular unit-testing karma-jasmine