javascript - Jasmine karma 单元测试 "Error: Unexpected request: GET/Content/json/3420_layer0.json"

标签 javascript json angularjs karma-jasmine httpbackend

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

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);

添加: 完整的堆栈跟踪

最佳答案

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

试试下面的代码

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

关于javascript - Jasmine karma 单元测试 "Error: Unexpected request: GET/Content/json/3420_layer0.json",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33775157/

相关文章:

javascript - 一个 JavaScript 函数禁用其他函数

javascript - 将 JSON 对象加载到 D3 力定向图中

javascript - AngularJS:将 ng-transclude 放入变量(ng-transclude 到占位符)

javascript - 提交表单后,从数据库中将订单号加载到警报框中

javascript - 添加带有其他选择标签的选择选项

asp.net - 无法让 Web API 在 VS 2010 或 2012 中工作

php - 使用谷歌通过反向地理编码获取街道、城市和国家

angularjs - ngtable : sort and filter on nested object

angularjs - JSON数据名称显示

javascript - 在 next.config.js 中同时添加对 next-css 和 next-less 的支持