我最近将应用程序更新为Angular 1.5.x,现在单元测试失败,因为默认路由的templateUrl正试图在$ digest()上获取;
我一直试图在Angular变更日志中找到预期行为的差异,但是还没有能够追踪它。
Error: Unexpected request: GET views/dashboard.html
No more request expected in .../app/bower_components/angular-mocks/angular-mocks.js (line 1404)
$httpBackend@.../app/bower_components/angular-mocks/angular-mocks.js:1404:90
sendReq@.../app/bower_components/angular/angular.js:11293:21
serverRequest@.../app/bower_components/angular/angular.js:11003:23
processQueue@.../app/bower_components/angular/angular.js:15627:30
.../app/bower_components/angular/angular.js:15643:39
$eval@.../app/bower_components/angular/angular.js:16895:28
$digest@.../app/bower_components/angular/angular.js:16711:36
.../test/spec/controllers/dashboard.js:96:29
这是什么原因以及如何解决?如有必要,很乐意提供更多示例。测试是使用Jasmine编写的,并由Karma执行。
答案 0 :(得分:0)
当您创建范围并调用apply / digest时,默认情况下摘要将开始遍历rootscope上的更改,如果您使用$ state,则会在加载意外模板的第一个摘要上解析默认状态。
如果您不需要测试状态变化,我建议使用延迟拦截方法
beforeEach(module(function ($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
}));
或者按照本文中的建议,如果您希望监视状态更改UI Router Extras breaks my unit tests with unexpected results error?
beforeEach( inject( function ( _$state_ ) {
state = _$state_;
spyOn( state, 'go' );
spyOn( state, 'transitionTo' );
} ) );