如果我在该服务的服务和单元测试中添加订阅,我在“订阅”类型中不存在“订阅”属性?

时间:2018-04-19 17:18:04

标签: angular unit-testing subscription subscribe

这是我的服务

我-service.service.ts

export class MyService {
    constructor(public http: HttpClient) {}

    createChatRecord (data, id) {
        let logData = {"hist" : data , "uid": id };
        let headers = new HttpHeaders();
        headers = headers.set("Content-Type", "application/json");
        let options = { headers: headers };

        return this.http.post(MY_URL, logData, options)
            .subscribe(res => res);

    }
}

这是我上述服务的规范文件

我-service.spec.ts

it("It should post", () => {
        myservice.createChatRecord(mockData, mockId)
            .subscribe((data: any) => {
            expect(data).toBe(null);
        });
    const mockReq = httpMock.expectOne(MY_URL);
    expect(mockReq.request.method).toBe("POST");
    mockReq.flush(null);
    httpMock.verify();
});

如果我在spec文件中添加subscribe,我收到此错误。 属性'订阅'在“订阅”类型上不存在。但是,如果我在服务中删除订阅,则不会显示该错误。

我需要在我的服务中使用subscribe。如何在没有此错误的情况下测试此帖子?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您在服务类中错误地使用了subscribe()。如果删除该用法,您将摆脱该错误。

createChatRecord (data, id) {
    let logData = {"hist" : data , "uid": id };
    let headers = new HttpHeaders();
    headers = headers.set("Content-Type", "application/json");
    let options = { headers: headers };

    return this.http.post(MY_URL, logData, options);

}

答案 1 :(得分:0)

正如丹尼尔建议的那样,我从服务中删除了订阅,并在我调用createChatRecord的方法中添加了服务。

我的函数调用createChatRecord

myfunction() { // To make call record in service now 
    this.servicenow.createChatRecord(this.conversationData, this.userId)
    .subscribe();
}

<强> myservice.service.ts

 createChatRecord (data, id) {
        let logData = {"hist" : data , "uid": id };
        let headers = new HttpHeaders();
        headers = headers.set("Content-Type", "application/json");
        let options = { headers: headers };

        return this.http.post(MY_URL, logData, options);

    }

所以我了解到,如果我在服务中订阅,它将返回订阅而不是Observable,这就是我收到此错误的原因。