gpt4 book ai didi

angular - 测试带有订阅的 typescript 函数

转载 作者:行者123 更新时间:2023-11-28 20:36:42 26 4
gpt4 key购买 nike

所以我正在使用 Jasmine/Karma 进行测试并使用 Angular 4。我正在尝试测试一个如下所示的函数:

enter image description here

如您所见,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();
}));

但我仍然遇到“Expected undefined to be defined”的失败。

最佳答案

你需要看看异步单元测试:

 it('#getObservableValue should return value from observable',
(done: DoneFn) => {
service.getObservableValue().subscribe(value => {
expect(value).toBe('observable value');
done();
});
});

以上代码来自文档:https://angular.io/guide/testing#service-tests

关于angular - 测试带有订阅的 typescript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51989243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com