因此,我正在使用Jasmine / Karma进行测试,并且正在使用Angular4。我正在尝试测试如下所示的函数:
如您所见,this.name分配没有被触及。我试过用以下方法进行测试:
it('should make sure name is set', () => {
component.retrievePageInfo();
expect(component.name).toBeDefined();
});
,但目前尚不确定。我不确定如何等待它完成。 我也尝试过:
it('should make sure name is set', () => {
component.retrievePageInfo().subscribe(art => {
expect(component.name).toBe(art["name"]);
});
});
但是我收到错误消息“类型'void'上不存在属性'subscribe'”。但是,如果我将功能更改为:
retrievePageInfo() {
return this.httpClient.get("/api/art/" + this.art_id)
.subscribe(art => {
this.name = art['name'];
});
}
我收到错误消息“订阅”类型上不存在属性“订阅”。但我需要在这里订阅。
请帮助!
编辑:一个大概的例子会很好,因为我似乎无法正确理解。我目前正在尝试将其拆分为一个函数,该函数返回一个可观察的函数,另一个函数使用该函数,但是我的测试仍然没有捕获到它
编辑:这是我最新的尝试: 我已经导入了fakeAsync并打勾
it('should set name value', fakeAsync(() => {
expect(component.name).toBeUndefined();
spyOn(component, "retrievePageInfo");
component.retrievePageInfo();
tick();
fixture.detectChanges();
expect(component.name).toBeDefined();
}));
但是我仍然遇到“未定义的预期未定义”错误。
答案 0 :(得分:1)
您需要查看异步单元测试:
it('#getObservableValue should return value from observable',
(done: DoneFn) => {
service.getObservableValue().subscribe(value => {
expect(value).toBe('observable value');
done();
});
});