我一直在尝试为我的 Progress Service 编写单元测试,它管理流程的不同状态(跳转到下一个不完整的步骤,标记步骤完成等)
我正在尝试配置$ stateProvider来创建一组状态,然后针对它测试服务,但我无法让状态发生变化。当然我想以一种孤立的方式测试它,所以不依赖于我的应用程序中的现有状态。
这是简单的单元测试:
ddescribe('Progress Steps Service', function() {
var sut, $rootScope, $state;
// holds ui.router and ProgressStepsService deps
beforeEach(module('Core'));
beforeEach(inject(
function(_$rootScope_, _$state_) {
$rootScope = _$rootScope_;
$state = _$state_;
}
));
beforeEach(inject(function(ProgressStepsService) {
// var steps = [...];
// sut = ProgressStepsService;
// sut.resolve(steps);
angular.module('TestModule', []).config(function($stateProvider) {
$stateProvider
.state('root', {url: '/root', abstract: true})
.state('root.step1', {url: '/step1'})
.state('root.step2', {url: '/step2'})
.state('root.step3', {url: '/step3'});
});
$state.go('root.step1');
$rootScope.digest();
}));
it('should init from the first step', function() {
expect($state.$current.name).toBe('root.step1');
});
});
我得到的错误是
Error: Could not resolve 'root.step1' from state ''
我认为''
是默认状态,并且由于某种原因,配置的状态不可导航。我可能遗漏了一些非常基本的东西。
如何配置$stateProvider
以针对任意状态进行测试?
答案 0 :(得分:0)
好的,所以这就是我认为发生的事情:
我在通过$state
进行配置之前加载$stateProvider
,此外,我没有注入TestModule。
我已将代码更新为:
ddescribe('Progress Steps Service', function() {
var sut, $state, $rootScope;
beforeEach(function() {
// var steps = [...];
// sut = ProgressStepsService;
// sut.resolve(steps);
angular.module('TestModule', []).config(function($stateProvider) {
$stateProvider
.state('root', {url: '/root', abstract: true})
.state('root.step1', {url: '/step1'})
.state('root.step2', {url: '/step2'})
.state('root.step3', {url: '/step3'});
});
module('Core', 'TestModule');
inject(function(){});
});
beforeEach(inject(
function(_$state_, _$rootScope_) {
$state = _$state_;
$rootScope = _$rootScope_;
}
));
it('should transition to the first incomplete state', function() {
$state.go('root.step1');
$rootScope.$digest();
expect($state.$current.name).toBe('root.step1');
});
});
这就是诀窍。