【问题标题】:jasmine karma unit test "Error: Unexpected request: GET /Content/json/3420_layer0.json"茉莉业力单元测试“错误:意外请求:GET /Content/json/3420_layer0.json”
【发布时间】:2026-01-04 15:00:01
【问题描述】:

编写一个简单的测试用例。

describe('Services', function () {

    describe('API', function () {

        var $httpBackend, $rootScope, createController, requestHandler;
        var jsonLayer0 = "/Content/json/3420_layer0.json";

        // Set up the module
        beforeEach(module('anbud'));

        beforeEach(inject(function ($injector) {
            // Set up the mock http service responses
            $httpBackend = $injector.get('$httpBackend');

            $httpBackend.whenGET(jsonLayer0).respond(200, '');

            $rootScope = $injector.get('$rootScope');

            // The $controller service is used to create instances of controllers
            var $controller = $injector.get('$controller');

            createController = function () {
                return $controller('anbudTreeController', { '$scope': $rootScope });
            };
        }));

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

        it('should fetch first layer', function () {
            $httpBackend.expectGET(jsonLayer0);
            var controller = createController();
            $rootScope.getFirstLayer();
            $httpBackend.flush();
        });

我明白了:

Error: Unexpected request: GET /Content/json/3420_layer0.json

但是,我确实有:

var jsonLayer0 = "/Content/json/3420_layer0.json";
$httpBackend.whenGET(jsonLayer0).respond(200, '');

所以,不知道是什么问题……

完整的堆栈跟踪:

Error: Unexpected request: GET test
        No more request expected
            at $httpBackend (C:/git/angularjs/NSview/NSviewer/Scripts/angular-mocks.js:1244:9)
            at $httpBackend (C:/git/angularjs/NSview/NSviewer/Scripts/angular-mocks.js:1237:11)
            at sendReq (C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:10515:9)
            at serverRequest (C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:10222:16)
            at processQueue (C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:14745:28)
            at C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:14761:27
            at Scope.$eval (C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:15989:28)
            at Scope.$digest (C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:15800:31)
            at Function.$httpBackend.flush (C:/git/angularjs/NSview/NSviewer/Scripts/angular-mocks.js:1543:38)
            at Object.<anonymous> (C:/git/angularjs/NSview/NSviewer/app/tests/testServiceAPI.js:54:26)
        Error: [$rootScope:inprog] $digest already in progress
        http://errors.angularjs.org/1.4.7/$rootScope/inprog?p0=%24digest
            at C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:68:12
            at beginPhase (C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:16346:15)
            at Scope.$digest (C:/git/angularjs/NSview/NSviewer/Scripts/angular.js:15780:9)
            at Function.$httpBackend.verifyNoOutstandingExpectation (C:/git/angularjs/NSview/NSviewer/Scripts/angular-mocks.js:1575:38)

编辑: 补充:

$httpBackend.expectGET(jsonLayer0);

添加: 完整的堆栈跟踪

【问题讨论】:

  • 你能发布错误的完整堆栈跟踪吗?

标签: javascript json angularjs karma-jasmine httpbackend


【解决方案1】:

需要告诉$httpBackend 等待 GET 请求。

试试下面的代码

it('should fetch first layer', function () {
    $httpBackend.expectGET(jsonLayer0);
    var controller = createController();
    $rootScope.getFirstLayer();
    $httpBackend.flush();
});

【讨论】:

  • 谢谢,这是有道理的,但添加了它,我仍然得到同样的错误! ://
  • @ganjan 删除 $httpBackend.expectGET(jsonLayer0);来自 beforeEach 函数并将其仅添加到测试用例中。