【问题标题】:How do I get then on $http to resolve on an Karma AngularJS automated test so that it passes?然后我如何在 $http 上解决 Karma AngularJS 自动化测试以使其通过?
【发布时间】:2017-12-11 18:20:24
【问题描述】:

这是我的代码的简化版本:

Plunker:https://plnkr.co/edit/ZlX8oV2bMtzXrxtwGX8q?p=preview

angular.module('test', []).factory('test', function ($http) {
    var service = {};

    service.load = function () {
        return $http.get('api/test');
    };

    return service;
})

describe('test', function () {
    var test;
    var $httpBackend;
    var $q;
    var $rootScope;

    beforeEach(angular.mock.module('test'));

    beforeEach(inject(function (_test_, _$httpBackend_, _$rootScope_) {
        test = _test_;
        $httpBackend = _$httpBackend_;
        $rootScope = _$rootScope_;
    }));

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

    it('should be defined', function (done) {
        var expected = 123;
        $httpBackend.whenGET('api/test').respond(expected);
        var promise = test.load();

        promise.then(function (result) {
            expect(result.data).toBe(expected);
            done();
        });

        $httpBackend.flush();
        $rootScope.$apply();
    });
}); 

我已经像this answer 建议的那样打电话给$rootScope.$apply()

测试运行器正在超时。这意味着done() 永远不会被调用。这意味着传递给then 的函数永远不会被调用。如何调用该函数?我希望触发一个摘要循环来做到这一点。

【问题讨论】:

    标签: javascript angularjs jasmine


    【解决方案1】:

    respond 的第一个参数应该是状态码。

    $httpBackend.verifyNoOutstandingExpectation(); 给出了一个错误,所以我把它去掉了。

    angular.module('test', []).factory('test', function ($http) {
        var service = {};
    
        service.load = function () {
            return $http.get('api/test');
        };
    
        return service;
    })
    
    describe('test', function () {
        var test;
        var $httpBackend;
        var $q;
        var $rootScope;
    
        beforeEach(angular.mock.module('test'));
    
        beforeEach(inject(function (_test_, _$httpBackend_, _$rootScope_) {
            test = _test_;
            $httpBackend = _$httpBackend_;
            $rootScope = _$rootScope_;
        }));
    
        afterEach(function() {
            $httpBackend.verifyNoOutstandingRequest();
        });
    
        it('should be defined', function (done) {
            var expected = 123;
            $httpBackend.whenGET('api/test').respond(200, expected);
            var promise = test.load();
    
            promise.then(function (result) {
                expect(result.data).toBe(expected);
                done();
                console.log('here');
            });
    
            $httpBackend.flush();
        });
    }); 
    

    【讨论】:

      猜你喜欢
      • 2014-01-10
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多