在我们的模块中,我们定义了一个自定义方法,它本质上为 $stateProvider 添加了更多功能...
(function () {
'use strict';
angular
.module('someModule', [])
.config(config);
config.$inject = ['$stateProvider'];
function config ($stateProvider) {
$stateProvider
.appState({})
问题是无论我在规范文件中尝试什么,我都无法覆盖 appState 方法,只能使用原始方法。
beforeEach(function () {
angular.mock.module('someModule', function ($stateProvider) {
spyOn($stateProvider, 'appState').and.returnValue({
stateName: 'mockState',
url: '/mock-url'
});
});
});
那么如何从 ui-router 模拟配置提供程序,例如 $stateProvider?
您可以使用
$provide
并在使用 $provide
提供值之前模拟这些值。
beforeEach(function(){
const stateProviderMock = {
appState: () => {}
};
spyOn(stateProviderMock, 'appState').and.returnValue({});
module('someModule');
module(function ($provide) {
$provide.value('$stateProvider', stateProviderMock);
});
});