【问题标题】:Angular Karma Unit Test: How to inject a mock service in karma configuration instead of in all test specsAngular Karma 单元测试:如何在 karma 配置中而不是在所有测试规范中注入模拟服务
【发布时间】:2015-03-30 10:49:07
【问题描述】:

最近,我为现有的 Angular 应用程序添加了一项安全功能。这是我后来得到的:

Chrome 3X.0.2125 (Linux) ERROR
  Some of your tests did a full page reload!
Chrome 3X.0.2125 (Linux): Executed 23 of 102 (skipped 2) ERROR 

这就是我设置安全功能的方式:

angular.module('myapp', [/*..I have omitted..*/])
       .run(function(MyLoginSerivce, /*.. I have omitted ..*/)){
           if(!MyLoginService.isLoggedIn()){
               MyLoginService.redirectForLogin();
           }else{
               /* other logics */
           }
       }

我知道我必须将以下代码添加到每个测试规范中。但是将它添加到几十个测试文件中听起来很愚蠢。

  beforeEach(module(function($provide){
    $provide.value("MyLoginServce", {
      isLoggedIn: function(){
        return true;
      },
      redirectForLogin: function {}
    });
  }));

有没有办法告诉 Karma 使用模拟服务并只在一个地方添加那段代码?

谢谢

当前解决方案

第 1 步:我将其保存在一个单独的文件中,例如./test/mocked.login.service.js:

   var mockedLoginService = {
      isLoggedIn: function(){
        return true;
      },
      redirectForLogin: function {}
    });

第 2 步:我通过插入“test/mocked.login.service.js”将文件包含在 karma.conf.js 中

第 3 步:我只是在我的测试中使用它,如下所示:

  beforeEach(module(function($provide){
    $provide.value("MyLoginServce", mockedLoginService
  }));

【问题讨论】:

    标签: angularjs unit-testing karma-jasmine


    【解决方案1】:

    您可以将模拟服务作为对象提取到单独的 js 文件中,将该文件包含在 karma.conf 文件列表中,然后将该对象用作规范中的全局对象。

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多