jbe*_*nal 5 unit-testing jasmine angularjs angular-material
我正在使用材料设计构建一个角度应用程序.我正在使用$ 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();
}
}
}());
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好,它工作正常.当我尝试使用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();
});
Run Code Online (Sandbox Code Playgroud)
有没有办法测试这个?
我不熟悉材料设计库,但它看起来像$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;
};
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |