gpt4 book ai didi

javascript - 使用 Jasmine 测试方法的可观察返回值

转载 作者:行者123 更新时间:2023-11-28 17:50:43 25 4
gpt4 key购买 nike

我是 Jasmine 新手,我正在尝试编写一个简单的单元测试来检查我的方法是否返回预期值。这是我的 Angular 应用程序中的方法:

saveEvent(techEvent): Observable<IEvent>{

let headers = new Headers({ 'Content-Type': 'application/json'})
let options = new RequestOptions({headers: headers})

return this.http.post('/api/events', techEvent, options)
.map((response: Response) => {
//have an updated copy of saved event
return response.json()
}).catch(this.handleError)
}

如您所见,这是一个保存“techEvent”对象的 post 方法。这是我尝试在规范中编写的测试:

   it('should save the event', () => {

var testEvent = { id: 7, name: "AngularJS"}

mockHttp.post.and.returnValue(Observable.of(false))

techEventService.saveEvent(<IEvent>testEvent)

expect(techEventService.saveEvent).toBe(jasmine.any(Object))

})

此测试失败:(。我的目标是简单地测试该方法是否返回一个对象并返回传递的特定对象。我想知道我是否也可以测试它是否是 JSON...

最佳答案

您的方法是异步的,这通常是 Observables 的情况。您需要订阅来自 techEventService.saveEvent 的响应,并验证该订阅回调中的变量是否已更改。

此外,您正在测试 techEventService.saveEvent 是否是一个对象,但这绝对是对 techEventService.saveEvent 函数的引用。我相信您想测试来自服务器的响应是否是一个对象,这是在 subscribe() 回调中运行测试的另一个原因。

it('should save the event', (done) => {

var testEvent = { id: 7, name: "AngularJS"};

mockHttp.post.and.returnValue(Observable.of(false));

techEventService.saveEvent(<IEvent>testEvent).subscribe((response) => {
expect(response).toBe(jasmine.any(Object));
done();
});
});

因为这是异步的,所以 jasmine 可能会认为测试在实际加载回调之前完成(甚至从未到达 expect 调用,并在未运行测试的情况下声明测试通过。)原因,您可以将 done 传递到您的测试中,然后 jasmine 不会认为您的测试已完成,直到您调用 done() 回调。

旁注:养成在适当的时候以分号结束行的习惯。

关于javascript - 使用 Jasmine 测试方法的可观察返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45575801/

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