我有一个控制器测试,取决于Angular $ routeParams服务:
var $routeParams, MainCtrl, scope;
beforeEach(inject(function ($controller, $rootScope, $injector, $templateCache) {
scope = $rootScope.$new();
$routeParams = $injector.get('$routeParamsMock');
MainCtrl = $controller('MainCtrl', {
$scope: scope,
$routeParams: $routeParams,
});
}));
it('should load a pg from $routeParams', function(){
scope.userData = {};
$routeParams._setPg('PG_FIRST');
scope.$digest();
timeout.flush();
expect(scope.userData.pg).toBe(0);
$routeParams._setPg('PG_SECOND');
scope.$digest();
timeout.flush();
expect(scope.userData.pg).toBe(1);
});
Run Code Online (Sandbox Code Playgroud)
$ routeParamsMock:
!(function(window, angular){
'use strict';
angular.module('vitaApp')
.service('$routeParamsMock', function() {
var _pg = null;
return{
pg: _pg,
_setPg: function(pg){
_pg = pg;
}
}
});
})(window, window.angular);
Run Code Online (Sandbox Code Playgroud)
在调试测试时,我很惊讶地发现$ routeParamsMock.pg每次都返回null,即使我用不同的值调用_setPg.
是因为null被认为是一个原语(具有一种对象......),因此通过值传递?,或者可能是因为Angular正在复制传递给$ controller服务的对象?
我正在寻找的解决方案最好是不需要为每个不同的测试场景设置不同控制器的解决方案.例如: …