我是 karma/jasmine 框架的新手。
我正在尝试添加一个测试用例来覆盖我的服务方法(如下)
public getAllChassis(): Observable<Chassis[]> {
return this.http.get('chassis').pipe(
mergeMap((result: Chassis[]) => {
for (const chassis of result) {
chassis.healthStatus = 45;
chassis.complianceStatus = 81;
}
return of(result);
}));
}
不包括回调/内部管道语句。 测试这些 mergeMap 模式的正确方法是什么?
答案 0 :(得分:0)
我不确定您是否应该使用 mergeMap
。你应该检查一下。
以下是我如何测试来自发出 HTTP 请求并返回 observable 的服务的函数。
这是我如何在 Angular 项目中使用 TestBed
注入依赖项的示例。
let httpClient: HttpClient;
let service: YourService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
...
}).compileComponents();
httpClient = TestBed.get(HttpClient);
service = TestBed.get(YourService);
});
为了确保 get 请求返回您想要的内容,您必须监视它并提供一个假的结果。
describe("WHEN: getAllChassis", () => {
beforeEach(() => {
const RESPONSE_MOCK = of(
new HttpResponse({
body: {
/* whatever your service returns */
},
})
);
spyOn(httpClient, "get").and.returnValue(RESPONSE_MOCK);
});
// Here will go your test
});
要测试您的功能,请检查它是否返回您期望的内容(考虑到我们知道 http.get 将返回什么)。
请注意,我使用的是 done
,因为这是一个异步函数。直到 done 被调用(或超时),测试才会结束。
it("THEN: should return data", (done) => {
getAllChassis()
.pipe(take(1))
.subscribe((data) => {
expect(data).toEqual({
/* what you expect in result */
});
done();
});
});