如何对 $mdSidenav 服务进行单元测试?
How to unit test $mdSidenav service?
我正在使用 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 为其编写单元测试时,问题就来了。我通常创建存根或间谍来模拟我的依赖关系,但由于使用它的奇怪方式,我无法用 $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
returns 一个函数。
你为什么不替换:$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;
};
})
我正在使用 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 为其编写单元测试时,问题就来了。我通常创建存根或间谍来模拟我的依赖关系,但由于使用它的奇怪方式,我无法用 $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
returns 一个函数。
你为什么不替换:$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;
};
})