Karma回调总是未定义的

时间:2017-04-04 14:01:17

标签: unit-testing angular karma-jasmine

我在服务的单元测试期间遇到了问题 这是我的测试用例

it("updateUserProfile() should update user profile", async(() => {
 mockBackend.connections.subscribe((connection: MockConnection) => {
 let responseOpts = new ResponseOptions({ body: JSON.stringify({ username: "testuser" }) });
  connection.mockRespond(new Response(responseOpts));
 });
 let obj = {
  callback: (r) => {
    expect(r.username).toBe("testuser");
  }
 };
 spyOn(obj, "callback").and.callThrough();
 service.updateUserProfile({}, obj.callback);
 expect(obj.callback).toHaveBeenCalled();
}));

这是我的服务

updateUserProfile(user: Profile, callback?: Function): void {
 let sub = this.http.patch(url, user, { headers: this.getHeaders() }).subscribe(r => {
   callback(r);
   if (sub) sub.unsubscribe();
 });
}

在这种情况下它正常工作我的spy返回true表示回调被触发但我的callback中的代码总是未定义我也想测试响应。

1 个答案:

答案 0 :(得分:0)

我有问题的解决方案

updateUserProfile(user: Profile, callback?: Function): void {
 let sub = this.http.patch(url, user, { headers: this.getHeaders() }).subscribe(r => {
   callback(r.json());
   if (sub) sub.unsubscribe();
 });
}

我正在调用callback而没有将响应解析为json,它应该至少调用我的callback响应。将callback(r)更改为callback(r.json())后,我将数据存入我的回调中。