在角度单位测试我们应该打电话给哪个服务?

时间:2018-03-28 07:23:48

标签: angular jasmine

您好我正在茉莉花中编写单元测试用例。我在我的组件中与restful API交互。我正在编写删除单位案例,添加用户等。我有调用API的服务,我写了一些不会与API交互的模拟服务。我创建了JSON数据,所有API都会从这个JSON对象中获取数据。现在我已经为删除用户编写了单元测试。现在我应该调用我真正的服务,与我创建的服务器或模拟服务进行交互,这些服务将与本地JOSN数据交互?下面是我的示例模拟服务和单元测试。

以下是删除用户的单元测试。

it('should delete the user', async(() => {
    spyOn(service, 'deleteUserEndpoint');
    let button = fixture.debugElement.nativeElement.querySelector('#delete');
    button.click();
    fixture.whenStable().then(() => {
        expect(service.deleteUserEndpoint('101')).toHaveBeenCalled();
    })
}));  

以下是我的模拟服务。

deleteUserEndpoint(userid: string) {
    var deleteUserUserOnboard = { result: true };
    return Observable.of(deleteUserUserOnboard);
} 

有人可以确认我应该拨打哪些服务?此外,当我运行上面的代码时,我遇到了错误。

Failed: <spyOn> : could not find an object to spy upon for deleteUserEndpoint()

有人可以帮助我让我的单元测试成功运行吗?任何帮助,将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

首先,您应该从不调用真正的REST API服务或在单元测试中与外部世界交互的任何内容,这是集成测试的工作。原因是你的测试必须能够在你的外部依赖成功但是也失败时评估代码是否运行顺畅......这就是mock有用的原因

要模拟您的服务,请使用operator+()

fixture.debugElement.injector.get()
相关问题