【问题标题】:Angular2 Dependency Inejction and Unit TestsAngular2 依赖注入和单元测试
【发布时间】:2018-03-03 22:46:12
【问题描述】:

我想问一下 Angular4 中的依赖注入如何以及如何在单元测试中使用它来模拟服务。

首先,我没有检查任何Angular2测试框架,在这一点上,我想了解更多关于一般概念的信息。

为什么 Angular 中的 DI 被称为 DI?

当您在构造函数中列出要注入的服务时,您必须导入对文件的引用。

当您在提供程序中注册服务时,它只是一个类名。我在这里看不到任何接口 - 类配对的可能性。

我无法抗拒,但我认为这种行为与静态类没有区别。

以某种方式模拟单元测试服务的技术是什么?

非常感谢所有输入 :)

【问题讨论】:

  • 您在提问前检查过docs.angularjs.org/guide/diangular.io/guide/testing 章节吗? SO 是一个很有帮助的社区,但缺乏任何研究的问题通常不受欢迎。关于DI,在构造函数中注入ClassName标记的东西不是类本身,它可以是类实例,也可以是另一个类,或者另一个类实例。
  • 是的,我做了一些研究,谷歌没有提供任何有趣的东西...提供的链接是针对以前版本的 Angular。
  • 哦,对不起,错过了第二个。但我不仅对单元测试感兴趣,而且对 DI 感兴趣。关于那个主题,我真的没有找到任何东西,只是对功能的基本描述。提供参考的那个东西可能是第一个有趣的东西,将看看它。
  • 第一个链接错误。 Angular DI 背后的主要思想是可以有不同的提供者类型来定义将被注入的值 angular.io/guide/dependency-injection#injector-providers 。 DI 令牌可以是不需要导入的字符串,但强烈反对这种做法。

标签: angular unit-testing dependency-injection


【解决方案1】:

以某种方式模拟服务以进行单元测试的技术是什么?

在测试平台中声明服务后,您可以将服务注入测试。一个例子:

it('should mock videos', inject([VideoService], (videoService: VideoService) => { 
    videos = [
        { id: 0,  name: 'Superman' },
        { id: 1, name: 'Superman part 2' }
      ]
    spyOn(videoService, 'videos').and.returnValue(videos); 
    fixture.detectChanges();
    expect(component.getVideoOne()).toContain(Superman);

  });

【讨论】:

    猜你喜欢
    • 2017-02-07
    • 2021-06-19
    • 1970-01-01
    • 2017-11-03
    • 2016-02-16
    • 2010-10-23
    • 2017-04-01
    相关资源
    最近更新 更多