gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:37:30 24 4
gpt4 key购买 nike

我正在使用 Material 设计构建一个有 Angular 的应用程序。我正在使用 $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 为其编写单元测试时,问题就出现了。我通常创建 stub 或 spy 来模拟我的依赖项,但由于使用它的奇怪方式,我无法使用 $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();
});

有没有办法测试这个?

最佳答案

我对 Material 设计库不熟悉,但它看起来像$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;
};
})

关于angularjs - 如何对 $mdSidenav 服务进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31936131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com