对 AngularJS $window 服务进行单元测试

2024-01-11

我想对以下 AngularJs 服务进行单元测试:

.factory('httpResponseInterceptor', ['$q', '$location', '$window', 'CONTEXT_PATH', function($q, $location, $window, contextPath){
     return {
         response : function (response) {
             //Will only be called for HTTP up to 300
             return response;
         },
         responseError: function (rejection) {
             if(rejection.status === 405 || rejection.status === 401) {
                 $window.location.href = contextPath + '/signin';
             }
             return $q.reject(rejection);
         }
     };
}]);

我尝试过以下套件:

describe('Controllers', function () {
    var $scope, ctrl;
    beforeEach(module('curriculumModule'));
    beforeEach(module('curriculumControllerModule'));
    beforeEach(module('curriculumServiceModule'));
    beforeEach(module(function($provide) {
       $provide.constant('CONTEXT_PATH', 'bignibou'); // override contextPath here
    }));
    describe('CreateCurriculumCtrl', function () {
        var mockBackend, location, _window;
        beforeEach(inject(function ($rootScope, $controller, $httpBackend, $location, $window) {
            mockBackend = $httpBackend;
            location = $location;
            _window = $window;
            $scope = $rootScope.$new();
            ctrl = $controller('CreateCurriculumCtrl', {
                $scope: $scope
            });
        }));

        it('should redirect to /signin if 401 or 405', function () {
            mockBackend.whenGET('bignibou/utils/findLanguagesByLanguageStartingWith.json?language=fran').respond([{"description":"Français","id":46,"version":0}]);
            mockBackend.whenPOST('bignibou/curriculum/new').respond(function(method, url, data, headers){
                return [401];
            });
            $scope.saveCurriculum();
            mockBackend.flush();
            expect(_window.location.href).toEqual("/bignibou/signin");
        });


    });
});

但是,它失败并显示以下错误消息:

PhantomJS 1.9.2 (Linux) Controllers CreateCurriculumCtrl should redirect to /signin if 401 or 405 FAILED
    Expected 'http://localhost:9876/context.html' to equal '/bignibou/signin'.
PhantomJS 1.9.2 (Linux) ERROR
    Some of your tests did a full page reload!

我不确定出了什么问题以及为什么。有人可以帮忙吗?

我只是想确保$window.location.href等于'/bignibou/signin'.

edit 1:

我设法让它按如下方式工作(感谢“dskh”):

 beforeEach(module('config', function($provide){
      $provide.value('$window', {location:{href:'dummy'}});
 }));

您可以在加载模块时注入存根依赖项:

angular.mock.module('curriculumModule', function($provide){
            $provide.value('$window', {location:{href:'dummy'}});
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 AngularJS $window 服务进行单元测试 的相关文章

随机推荐

  • C#中如何将整数转换为二进制字符串?

    我正在写一个数字转换器 如何在 C 中将整数转换为二进制字符串而不使用内置函数 Convert ToString根据给定的值做不同的事情 二进制 gt 符号幅度 二进制 gt 补码 二进制 gt 二进制补码 简单的解决方案 IntToBin
  • Application.Restart 不传回参数

    这是一个 ClickOnce 应用程序 根据文档 http msdn microsoft com query dev10 query appId Dev10IDEF1 l EN US k k 28SYSTEM WINDOWS FORMS A
  • PHP 命名空间不工作

    我第一次尝试使用 PHP 命名空间 甚至无法获得使用 2 个文件的非常基本的示例 这是我的目录设置 Framework Framework index php Framework Models TestModel php 这是两个文件背后的
  • 如何恢复 iOS Simulator 5.1 周围的 iPad 边框?

    通过 Xcode 4 3 1 Apple 发布了新的 iOS 5 1 模拟器 不幸的是 当您运行 iPad 硬件时 SIM 窗口周围不再有 iPad 框架 有谁知道如何恢复该框架 我经常使用模拟器通过屏幕共享向其他人演示功能 当它在 iPa
  • 问题:软锁定缓存条目已被底层 Ehcache 过期

    我收到警告 但我不知道该怎么办 每次被禁止的 IP 更新时 大约有 80000 个条目将此警告写入 tomcat 中的 catalina out 日志文件中 WARNING Cache package BannedIP Key packag
  • Shell 脚本调试帮助 - 遍历目录中的文件

    bin sh files ls myDir myDir2 myDir3 for file in files do echo file java myProg file another directory done 我想做的是迭代 myDir
  • Delphi 中的任何 Asn1 实现

    Delphi 中是否有任何不错的 asn1 实现或库 Try StreamSec ASN 1 工具 http www streamsec com products stasn1 asp 它们也出现在合作伙伴 DVD 中
  • 当值相等时,Angular 和 NGRX 防止选择器在状态更改时发出相同的值

    我正在寻找一种解决方案 使我的选择器仅在与上次发出的值相比发生变化时才发出新值 而不仅仅是对商店的引用发生变化 我的商店有以下状态 items loading false selectedItemId 1 我有以下选择器 export co
  • 填补D3数组嵌套的空白

    我有一个由日期和一些值组成的数组或对象 var flatData date 2012 05 26 product apple date 2012 07 03 product orange 我正在尝试使用 d3 nest 按年然后按月获取这些
  • appcompat_v7 和fragment_main.xml?

    我最近将 eclipse 和 ADT 插件从 v22 3 更新到 v22 6 并发现了一些重大变化 每当我创建一个新的 Android 应用程序项目时 都会出现一个新的 appcompat v7 库 该库在 v22 3 插件上不存在 并且还
  • jQuery / DataTables:如何更改分页颜色

    我正在使用 jQuery DataTables 插件 版本 1 9 4 并且想更改分页的颜色 使用 CSS 我可以更改它们的背景颜色 但我找不到更改锚标记的字体颜色和字体悬停颜色的方法 我想将以下所有锚标记的字体颜色和悬停字体颜色更改为白色
  • OpenAI:流中断(客户端断开连接)

    我正在尝试 OpenAI 我已经准备好了训练数据 并使用fine tunes create 几分钟后 显示Stream interrupted client disconnected openai api fine tunes create
  • 使用参数设置 Jenkins Pipeline 构建

    我阅读了大量有关 Jenkins 2 x 和管道系统的内容 以便创建具有以下功能的设置 SCM 管理 Jenkinsfile 构建对 git 存储库的每个提交 通过 webhook 触发器传递参数 到目前为止 由于各种原因 我未能建立一个工
  • 如何在asp.net MVC视图中有条件地设置模型?

    我是 ASP NET MVC 的初学者 我的页面有一个名为 Navigation 的部分视图 我正在重复使用它 如果用户位于 主页 a 导航的 href 需要指向 字符 如果用户位于 服务 页面 则导航的 href 需要指向其他 url 例
  • 如何VBA捕获请求超时错误?

    我正在使用对象MSXML2 ServerXMLHTTP60 http msdn microsoft com en us library ms762278 28v vs 85 29向网络服务发送请求 有了这个对象 我可以通过以下方式加快数据加
  • Safari 扩展截屏

    我正在开发 Safari 浏览器扩展 它应该具有截图功能 Chrome 和 Firefox 有自己的 api 来获取当前窗口文档的 SS 我找不到任何特定于 Safari 的 API 文档 窗口和选项卡 API https develope
  • RGB 颜色不正确 Unity C#

    所以我有一个 2D 对象 您可以使用按钮更改颜色 每个按钮都会更改对象的精灵 我有一个红色 橙色 黄色 绿色 蓝色 紫色的精灵 现在我有一个粒子系统 前面提到的对象的子对象 我想将其 startColor 属性更改为与 2D 对象的精灵相同
  • Scipy.cluster.hierarchy.fclusterdata + 距离测量

    1 我正在使用 scipy 的 hcluster 模块 所以我可以控制的变量是阈值变量 我如何知道每个阈值的表现 即在 Kmeans 中 该性能将是所有点到其质心的总和 当然 这必须进行调整 因为通常更多的簇 更短的距离 我可以用 hclu
  • TortoiseMerge 中的等号是什么意思?

    In TortoiseMerge 文档 http tortoisesvn net docs release TortoiseMerge en tmerge dug icons html 等号的意思是 通过恢复到该行的原始内容 已撤消更改 该
  • 对 AngularJS $window 服务进行单元测试

    我想对以下 AngularJs 服务进行单元测试 factory httpResponseInterceptor q location window CONTEXT PATH function q location window conte