如果我在该服务的服务和单元测试中添加订阅,我会得到 属性 'subscribe' does not exist on type 'Subscription'?

If i add subscribe in service and unit test of that service, i'm getting Property 'subscribe' does not exist on type 'Subscription'?

这是我的服务

我的-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();
});

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

我需要在我的服务中使用订阅。我如何在没有此错误的情况下测试此 post 调用?

如有任何帮助,我们将不胜感激!

您在服务 class 中错误地使用了 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);

}

正如 Daniel 所建议的,我从服务中删除了订阅,并在调用 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);

    }

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