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

对具有依赖项的AngularJS工厂进行单元测试

宇文航
2023-03-14
问题内容

在对Angular工厂进行单元测试(使用Karma + Jasmine)时,如何将存根依赖项注入到要测试的工厂中?

这是我的工厂:

mod = angular.module('myFactoryMod', []);

mod.factory('myFactory', [
  '$log', 'oneOfMyOtherServices', function($log, svc) {
    return makeSomethingThatDoesSomethingWithTheseDependencies($log, svc);
  }
]);

oneOfMyOtherServices 实例化我的工厂时需要。

这是我的测试:

it('can get an instance of my factory', function() {
  var oneOfMyOtherServicesStub;

  angular.mock.module('myFactoryMod');

  oneOfMyOtherServicesStub = {
    someVariable: 1
  };

  //****How do I get my stub in my target? ****

  angular.mock.inject(['myFactory', function(target) {

      expect(target).toBeDefined();

    }
  ]);
})

注意:我知道这$controller允许用于控制器,但是我没有看到与之等效的工厂。


问题答案:

我知道有两种方法可以完成这样的事情:

  1. 使用$provide和匿名模块注入模拟。
  2. 注入您要模拟的服务,并使用茉莉的间谍功能提供模拟值。

第二个选项仅在您确切知道被测代码将调用注入的服务并且可以轻松地将其模拟出来的情况下才有效。由于您似乎正在访问服务上的数据属性(而不是方法),因此最好选择第一个选项。

使用$provide大致如下所示:

describe('myFactory', function () {
  // Load your module.
  beforeEach(module('myFactoryMod'));

  // Setup the mock service in an anonymous module.
  beforeEach(module(function ($provide) {
    $provide.value('oneOfMyOtherServicesStub', {
        someVariable: 1
    });
  }));

  it('can get an instance of my factory', inject(function(myFactory) {
    expect(myFactory).toBeDefined();
  }));
});


 类似资料:
  • 问题内容: 我有一段代码,我不知道如何进行单元测试!该模块使用urllib2从外部XML提要(twitter,flickr,youtube等)中提取内容。这是一些伪代码: 我的第一个想法是腌制响应并加载它以进行测试,但是显然urllib的响应对象是不可序列化的(它引发了异常)。 仅从响应主体保存XML是不理想的,因为我的代码也使用标头信息。它旨在作用于响应对象。 当然,在单元测试中依赖外部数据源是

  • 我有一个apache beam管道,它从pubsub读取数据,使用Redis丰富数据,最后写入pubsub。我试图编写测试来测试浓缩Dofn,这是一个有状态Dofn。在这里,内部状态充当近缓存,以减少对Redis的调用。为了实例化我的Redis客户机,我使用PipelineOptions中声明的工厂,例如 理论上,上述客户机应该是每个工人的单人。在我的单元测试中,我试图模拟redis客户端中的一些

  • 问题内容: 我一直在学习AngularJS,并且在单元测试方面进展非常顺利,但是我遇到了一个棘手的问题。 假设我有一个简单的表格,例如: 如果我正在测试类似控制器的东西,我知道我会这样写(使用Jasmine + Karma): 但是我不知道我需要注入哪些服务,也没有运气在指南或文档中找到有关单元测试的文档。 一个单元如何在Angular中测试表单? 问题答案: 我不认为这是对此类内容进行单元测试的

  • 我有一个asp。net核心应用程序,该应用程序使用启动中定义的依赖项注入。应用程序的cs类: 这允许这样的操作: 这很整洁。但当我想进行单元测试时,这就成了一个问题。因为我的测试库没有启动。cs,其中我设置依赖项注入。因此,将这些接口作为参数的类将仅为null。 在上面的代码中,在测试库中,_matchRepository和_teamRepository将为空。:( 我可以做一些类似配置服务的事情

  • 我有以下方法,它采用UNIX时间戳并以天、小时或分钟的形式返回年龄。我想用JUnit单元测试它,但我不确定如何开始这样做,因为当前时间不断变化。有什么建议吗?谢谢! 方法如下: }

  • 我正在使用JavaFX ListView组件,并希望使用一个自定义的单元工厂。当包含列表视图的对话框打开时,项目将正确呈现。但是,如果我尝试从基础的可观察列表中添加或删除一个项,则列表视图中的项不会正确呈现。我会让细胞复制或缺失。下面是我的自定义单元格的FXML: 下面是我的自定义ListCell子类: