Angular测试总是通过测试,即使它是错误的



我对这个可观察对象进行了单元测试:

fdescribe('goToPurchases', () => {
it('should have working NavApiService',() => {
apiService.goToPurchases(null).subscribe((res: PurchaseResponse) => {
expect(res.shimentId).toBe('not supposed to be valid!')
expect(res.url).not.toBeDefined();
});
});
});

这是apiService.ts中的真实方法:

public goToPurchases(shipmentId: string): Observable<Object> {
return this.httpClient.post(`${environmentVariables.loadInsurance.apiUrl}/v1/purchases`, {shipmentId});
}

真实的响应应该是这样的:

{
"id": "50d4ad69-0337-4e49-8f00-5c9a152cfad0",
"shipmentId": null,
"userId": "41ac2d3d-b2ed-4c73-9c56-25d17a9caa7e",
"url": "https://test.portal.loadsure.net/insureLoad/v2?id=TFMtREFULzIwMjEwODMxL3l6ZDVlYlJRejdrQkdKcUwxbk5l"
}

当我运行测试时,它成功通过了吗?我做错了什么?

谢谢。

通过将期望放入订阅回调中,一旦检索到值,您就能够正确地对其求值。问题是测试在等待响应之前就完成了。通过这种方式完成,因为它不评估任何东西,所以测试是成功的。

你需要改变测试完成的方式。

你可以使用fakeasync,这样你的测试只会在所有异步任务完成后完成:

import { fakeAsync } from '@angular/core/testing';
fdescribe('goToPurchases', fakeAsync(() => {
it('should have working NavApiService',() => {
apiService.goToPurchases(null).subscribe((res: PurchaseResponse) => {
expect(res.shimentId).toBe('not supposed to be valid!')
expect(res.url).not.toBeDefined();
});
});
}));

相关内容

  • 没有找到相关文章

最新更新