Angular 1.5.x单元测试失败,因为它们请求$ route default templateUrls

时间:2016-03-23 18:03:36

标签: angularjs unit-testing

我最近将应用程序更新为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执行。

1 个答案:

答案 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' );
} ) );