将Angular 2.21升级到2.25时,与Jasmine httpBackend相关的测试被破坏

时间:2014-09-17 08:08:04

标签: angularjs jasmine karma-jasmine

我在Jasmine和Karma中有很多依赖于$ httpBackend HTTP模拟检查的测试。当我今天升级Angular时,他们停止了工作。

假设我的Jasmine测试中有类似的东西:

    // Arrange
    httpBackend.expect('POST', 'https://localhost:44300/api/projects/1/samples').respond(fakedDto);
    // Act
    scope.updateSamples();
    httpBackend.flush();

在最后一行,我之前完全没问题,我收到了:

    TypeError: $browser.$$checkUrlChange is not a function in C:/SVN/samplemgmt/src/ClientApp/client/bower_components/angular/angular.js (line 12502)
$RootScopeProvider/this.$get</Scope.prototype.$digest@C:/SVN/samplemgmt/src/ClientApp/client/bower_components/angular/angular.js:12502:9
createHttpBackendMock/$httpBackend.flush@C:/SVN/samplemgmt/src/ClientApp/client/bower_components/angular-mocks/angular-mocks.js:1481:5
@C:/SVN/samplemgmt/src/ClientApp/tests/integration/sample/samplecreationController_integration.test.js:341:9

此外,我有通常的配置来结束测试:

afterEach(function () {
    httpBackend.verifyNoOutstandingExpectation();
    httpBackend.verifyNoOutstandingRequest();
});

现在开始生成以下错误:

Error: [$rootScope:inprog] $digest already in progress
http://errors.angularjs.org/1.2.25/$rootScope/inprog?p0=%24digest in C:/SVN/samplemgmt/src/ClientApp/client/bower_components/angular/angular.js (line 78)
minErr/<@C:/SVN/samplemgmt/src/ClientApp/client/bower_components/angular/angular.js:78:5
beginPhase@C:/SVN/samplemgmt/src/ClientApp/client/bower_components/angular/angular.js:13009:9
$RootScopeProvider/this.$get</Scope.prototype.$digest@C:/SVN/samplemgmt/src/ClientApp/client/bower_components/angular/angular.js:12500:9
createHttpBackendMock/$httpBackend.verifyNoOutstandingExpectation@C:/SVN/samplemgmt/src/ClientApp/client/bower_components/angular-mocks/angular-mocks.js:1514:5
@C:/SVN/samplemgmt/src/ClientApp/tests/integration/sample/samplecreationController_integration.test.js:137:9

我很欣赏如何让事情再次发挥作用的一些建议。最近是否对httpBackend测试做了任何更改?

2 个答案:

答案 0 :(得分:6)

对于那些因旧Angular而无法升级且由于某种原因无法在此时升级的人,here是一篇很好的帖子,它解释了正在发生的事情以及如何解决问题。

总结 -

问题发生是因为$httpBackend.flush()$httpBackend.verifyNoOutstandingExpectation()错误地尝试进行摘要。显然,内部的(来自verifyNoOutstandingExpectation()调用)失败了。幸运的是,我们可以指示它不要执行摘要 - 请注意false参数:

afterEach(function() {
    $httpBackend.verifyNoOutstandingExpectation(false); // <-- here
    $httpBackend.verifyNoOutstandingRequest();
});

答案 1 :(得分:0)

已解决:此时必须手动更新Angular-Mocks(不使用bower ..)。