当前位置: 首页 > 面试题库 >

在单元测试AngularJS服务时注入依赖服务

白吕恭
2023-03-14
问题内容

我正在测试服务A,但是服务A取决于服务B(即服务B已注入服务A)。

我已经看到了这个问题,但是我的情况有所不同,因为我认为_模拟_ 服务B而不是注入服务B的实际实例更有意义。我将用茉莉间谍对其进行模拟。

这是一个示例测试:

describe("Sample Test Suite", function() {

  beforeEach(function() {

    module('moduleThatContainsServiceA');

    inject([
      'serviceA', function(service) {
        this.service = service;
      }
    ]);

  });

  it('can create an instance of the service', function() {
    expect(this.service).toBeDefined();
  });
});

我得到的错误是:

错误:未知提供程序:serviceBProvider

我该怎么做?


问题答案:

实际上,在AngularJS中,依赖注入使用“最后获胜”规则。因此,您可以在包含模块和依赖项之后在测试中定义服务,然后当您要测试的服务A将使用DI请求服务B时,​​AngularJS将提供服务B的模拟版本。

通常,这是通过定义新模块(例如MyAppMocks),在其中放置模拟服务/值然后仅将该模块添加为依赖项来完成的。

(示意上)的种类:

beforeEach(function() {
  angular.module('MyAppMocks',[]).service('B', ...));
  angular.module('Test',['MyApp','MyAppMocks']);
  ...


 类似资料:
  • 本文向大家介绍AngularJS 单元测试服务,包括了AngularJS 单元测试服务的使用技巧和注意事项,需要的朋友参考一下 示例 服务编号 考试 跑!

  • 问题内容: 我正在尝试为AngularJS应用编写HTTP拦截器以处理身份验证。 这段代码有效,但是我担心手动注入服务,因为我认为Angular应该自动处理此问题: 我刚开始做的事情,但是遇到了循环依赖问题: 我担心的另一个原因是Angular Docs中$ http上 的部分似乎显示了一种将依赖项注入“常规方式”到Http拦截器中的方法。请参阅“拦截器”下的代码段: 上面的代码应该放在哪里? 我

  • 我使用Dagger2在Android应用程序中提供我的所有类。我想对我的repository类进行单元测试,它在构造函数中提供了翻新服务。 } 网络模块类通过以下方式提供服务: 我试图使用Mockito来模拟类,但是我在方法中得到NullPointerExc0019。 } 请告诉我如何将服务注入测试,以便我可以在那里调用Http调用。非常感谢。

  • 主要内容:什么是依赖注入,value,factory,provider,constant,实例,AngularJS 实例 - factory,AngularJS 实例 - provider什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分。 该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦

  • 问题内容: 我想知道接下来的两行之间是否有区别,为什么要使用其中之一(这两行按预期工作) 我是从AngularJS官方教程中获得的,我知道有关于此修改的解释,但我不理解它…… http://docs.angularjs.org/tutorial/step_05 提前致谢! 问题答案: 如果缩小第一行,则会得到: 依赖注入将无法再工作,因为角度不知道什么和有。比较一下以缩小第二个版本: 该函数的参数

  • 本文向大家介绍浅谈Angular6的服务和依赖注入,包括了浅谈Angular6的服务和依赖注入的使用技巧和注意事项,需要的朋友参考一下 在开发中,组件一般用来写视图有关的功能,服务则写一些其他的逻辑,诸如从服务器获取数据、验证用户输入或直接往控制台中写日志等工作. 先解释两个概念: Providers(提供商):是个比较抽象的名词,我们把它想象为'图纸'更好理解一些,就比如我们想要生产汽车,就需要