加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何对$mdSidenav服务进行单元测试?

发布时间:2020-12-17 17:41:16 所属栏目:安全 来源:网络整理
导读:我正在使用材料设计构建一个角度应用程序.我正在使用$mdSidenav服务来玩sidenav,它应该能够随着用户的需求打开和关闭. 我已经围绕它创建了一个包装器服务,如下所示: (function () { 'use strict'; angular .module('app.layout') .factory('navigationServi
我正在使用材料设计构建一个角度应用程序.我正在使用$mdSidenav服务来玩sidenav,它应该能够随着用户的需求打开和关闭.

我已经围绕它创建了一个包装器服务,如下所示:

(function () {
  'use strict';

  angular
    .module('app.layout')
    .factory('navigationService',navigationService);

  navigationService.$inject = ['$mdSidenav'];

  function navigationService($mdSidenav) {
    var factory = {};        
    factory.toggle = toggle;
    return factory;

    //////////

    function toggle() {
      $mdSidenav('left').toggle();
    }
  }
}());

到目前为止这么好,它工作正常.当我尝试使用Jasmine为它编写单元测试时出现问题.我通常会创建存根或间谍来模拟我的依赖关系,但由于奇怪的使用方法,我无法用这个$mdSidenav完成它:$mdSidenav(sidenav-id).

通常,使用Jasmine来窥探你需要和对象以及你想要模拟的功能来监视它.运气好的话,我尝试了几种不同的可能性.

我的目标是类似于:

beforeEach(module(function ($provide) {
  mdSidenav = {};
  mdSidenav.toggle = jasmine.createSpy();
  $provide.value('$mdSidenav',mdSidenav);
}));

beforeEach(inject(function(_navigationService_) {
  navigationService = _navigationService_;
}));

it('Should call $mdSidenav toggle when required',function() {
    // act
    navigationService.toggle();
    // assert
    expect(mdSidenav.toggle).toHaveBeenCalled();
});

有没有办法测试这个?

解决方法

我不熟悉材质设计库,但看起来$mdSidenav返回一个函数.

你为什么不替换:$provide.value(‘$mdSidenav’,mdSidenav);

$provide.factory('$mdSidenav',function() { 
      return function(direction){//if you use direction ('left' in your example) you could use it here
                 return mdSidenav;
              };
})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读