【问题标题】:Angular 1.5.x unit tests fail because they request $route default templateUrlsAngular 1.5.x 单元测试失败,因为它们请求 $route 默认 templateUrls
【发布时间】:2016-03-23 18:03:35
【问题描述】:

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

【问题讨论】:

    标签: angularjs unit-testing


    【解决方案1】:

    当您创建一个范围并调用 apply/digest 时,默认情况下摘要将开始遍历根范围上的更改,如果您使用 $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' );
    } ) );
    

    【讨论】:

    • 谢谢!这是新行为吗?测试与我们运行 1.4.x 时的测试相同,我仍在尝试理解为什么现在开始失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多