在 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()

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

萨菲亚

首先,你应该从来不叫真正的REST API服务或任何与单元测试与外部世界的互动,这是一个集成测试的工作。这样做的原因是,当外部依赖成功但也失败时,您的测试必须能够评估代码是否运行顺利……这就是模拟有用的原因

要模拟您的服务,请使用fixture.debugElement.injector.get()

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [Component], 
        imports: [...]
    }).overrideComponent(Component, {
        set: {
            providers: [Service]

            OR 

            providers : [{
                provide : Service, useClass : ServiceMock
            }]


        }
    }).compileComponents();
}));

beforeEach(() => {
    fixture = TestBed.createComponent(Component);
    target.detectChanges();
});


it('should delete the user when service succeed', async(() => {
    let service = fixture.debugElement.injector.get(Service)
    spyOn(service, 'deleteUserEndpoint');
    let button = fixture.debugElement.nativeElement.querySelector('#delete');
    button.click();
    fixture.whenStable().then(() => {
        expect(service.deleteUserEndpoint).toHaveBeenCalledWith("101");
    })
}));



it('should show error message when service fails, async(() => {
    let service = fixture.debugElement.injector.get(Service)
    spyOn(service, 'deleteUserEndpoint').and.throwError("Deletion Failed");
    let button = fixture.debugElement.nativeElement.querySelector('#delete');
    button.click();
    fixture.whenStable().then(() => {
        // test here that you have the appropriate error message displayed
    })
}));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular 单元测试服务

来自分类Dev

单元测试 Angular 服务

来自分类Dev

使用 DarkSkyApi 调用进行 Angular 2 服务单元测试

来自分类Dev

在Angular单元测试中模拟异步Web服务

来自分类Dev

Angular JS服务中的单元测试承诺

来自分类Dev

Angular 服务中的单元测试 $q 承诺 - Karma、Jasmine

来自分类Dev

Angular 2+ 单元测试调用调用 httpclient get 的服务的服务

来自分类Dev

单元测试动态方法调用Angular

来自分类Dev

Angular服务的简单单元测试

来自分类Dev

Angular8服务单元测试

来自分类Dev

承诺的Angular服务单元测试失败

来自分类Dev

注入服务的 Angular 单元测试

来自分类Dev

使用Karma和Jasmine / Angular 8并行测试多个API调用的服务的单元测试

来自分类Dev

我们如何对AWS CDK代码进行单元测试?我们应该吗?

来自分类Dev

Angular指令中的单元测试$ formatters

来自分类Dev

Angular单元测试中的模式验证

来自分类Dev

Angular:在单元测试中模拟HttpClient

来自分类Dev

Angular指令中的单元测试$ formatters

来自分类Dev

在Angular单元测试中验证模式

来自分类Dev

使用angular-translate调用对AngularJS服务进行单元测试

来自分类Dev

超时内未调用异步回调-对Typescript和Angular $ http服务进行单元测试

来自分类Dev

使用 jasmine 运行 angular2 单元测试时调用服务时出错

来自分类Dev

我们应该使用管道代替Angular模板中的三元条件渲染吗?

来自分类Dev

Angular 2和带有服务的单元测试

来自分类Dev

无法将服务注入其Angular单元测试

来自分类Dev

使用Karma和Jasmine单元测试Angular服务

来自分类Dev

对需要Electron的Angular2服务进行单元测试

来自分类Dev

Angular 2和带有服务的单元测试

来自分类Dev

来自组件的 Angular 单元测试 spyOn 服务

Related 相关文章

  1. 1

    Angular 单元测试服务

  2. 2

    单元测试 Angular 服务

  3. 3

    使用 DarkSkyApi 调用进行 Angular 2 服务单元测试

  4. 4

    在Angular单元测试中模拟异步Web服务

  5. 5

    Angular JS服务中的单元测试承诺

  6. 6

    Angular 服务中的单元测试 $q 承诺 - Karma、Jasmine

  7. 7

    Angular 2+ 单元测试调用调用 httpclient get 的服务的服务

  8. 8

    单元测试动态方法调用Angular

  9. 9

    Angular服务的简单单元测试

  10. 10

    Angular8服务单元测试

  11. 11

    承诺的Angular服务单元测试失败

  12. 12

    注入服务的 Angular 单元测试

  13. 13

    使用Karma和Jasmine / Angular 8并行测试多个API调用的服务的单元测试

  14. 14

    我们如何对AWS CDK代码进行单元测试?我们应该吗?

  15. 15

    Angular指令中的单元测试$ formatters

  16. 16

    Angular单元测试中的模式验证

  17. 17

    Angular:在单元测试中模拟HttpClient

  18. 18

    Angular指令中的单元测试$ formatters

  19. 19

    在Angular单元测试中验证模式

  20. 20

    使用angular-translate调用对AngularJS服务进行单元测试

  21. 21

    超时内未调用异步回调-对Typescript和Angular $ http服务进行单元测试

  22. 22

    使用 jasmine 运行 angular2 单元测试时调用服务时出错

  23. 23

    我们应该使用管道代替Angular模板中的三元条件渲染吗?

  24. 24

    Angular 2和带有服务的单元测试

  25. 25

    无法将服务注入其Angular单元测试

  26. 26

    使用Karma和Jasmine单元测试Angular服务

  27. 27

    对需要Electron的Angular2服务进行单元测试

  28. 28

    Angular 2和带有服务的单元测试

  29. 29

    来自组件的 Angular 单元测试 spyOn 服务

热门标签

归档