这是我第一次进行单元测试,说实话,我还不太了解它的工作原理和目的。
我正在尝试通过发送有效/无效的“代码”来测试请求JWT令牌的角度服务功能。 因此,在请求中,我发送{“ code”:“ something”},并在成功或错误时返回JWT令牌(实际上,在两种情况下,它都返回200 OK,但只有主体会更改。就像成功时,它会返回{“ token “:” something“,” expireDate“:” something“},并在失败时{{error”:“ message”}这样)。 所以在这里我试图通过
模拟失败响应req.error(new ErrorEvent("ERROR"));
无论我如何模拟错误或更改后跟期望的方法,我都不会得到 单元测试通过。 就像我愿意
expect(result).toBe("random string");
它仍然通过。
另外,我不明白的是为什么
service.getTmwJwt(dummyCode).subscribe(result => {
expect(result).toThrow();
});
期望(结果)在req.error / flush之前出现? 因为req.error模拟了错误的响应。它不是应该比断言值先来吗?
这是原始的测试代码。
it('should return an error observable<Authorization> on error response',
( ) => {
const dummyCode = 'invalid';
service.getJwt(dummyCode).subscribe(result => {
expect(result).toThrow();
});
//will have to check the body since error also returns 200 ok
//instead of req.flush, do req.error
const req = httpMock.expectOne(`${CONST.TOKEN_URL}`);
expect(req.request.method).toBe('POST');
req.error(new ErrorEvent("ERROR_BAD_CODE_REQUEST"));
httpMock.verify();
});
这是我正在测试的服务功能。
public getJwt(code: any): Observable<Authorization> {
// const url = 'https://actualURL';
return this.http
.post<any>(CONST.TOKEN_URL, { code: "code"})
.pipe(catchError(this.handleError)); //returns failure observable
}
听起来确实很愚蠢,但我想我缺少一些概念。 谢谢。