使用Karma-Jasmine测试Angular Controller时出现$ httpbackend问题

时间:2014-07-08 12:50:33

标签: angularjs unit-testing jasmine karma-runner httpbackend

我把代码放在一个小提琴中,这样可以很容易地更新并在需要时“使用”。

describe('PlayersListCtrl', function() {  // Jasmine Test Suite

    beforeEach(module('wc2014App'));

    var ctrl, scope, $httpBackend;

    beforeEach(inject(function($controller, $rootScope) {

        scope = $rootScope.$new();

        ctrl = $controller('PlayersListCtrl', {
            $scope: scope
        });
    }));

    it('should have an empty player array', function() { 
        expect(scope.players.length).toBe(0);
    });

    describe('PlayersListCtrl', function() {
        var $httpBackend, $rootScope, createController;

        beforeEach(inject(function($injector) {
            $httpBackend = $injector.get('$httpBackend');
            $httpBackend.when('GET', '../app/stubs/players.json').respond(
                {userId: 'userX'}, 
                {'A-Token': 'xxx'});

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

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

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

        it('should fetch authentication token', function() {
            $httpBackend.expectGET('../app/stubs/players.json');
            var controller = createController();
            $httpBackend.flush();
        });
    });
});

其余的,因为它非常冗长,是在小提琴:http://jsfiddle.net/tLte2/

基本上第一个测试通过,而不是硬测试,但第二个测试依赖于JSON存根,并给出如下错误: PhantomJS 1.9.7(Mac OS X)PlayersListCtrl PlayersListCtrl应获取身份验证令牌FAILED     错误:没有待处理的待处理请求!

似乎无法控制这个$ httpBackend僵硬如何运作。是否必须可以触发它并将结果设置在控制器的范围内?

- 编辑 基本上所有东西都完美连接,可以做一些运行得很好的简单测试,但是在那里获取JSON存根数据似乎很痛苦。解决方法可以只是在控制器范围上定义JSON中描述的数组,如:controller.players = ['one','two','three',..... etc ......] 但那感觉不对。那个$httpBackend的东西应该不那么难以解决吗?

0 个答案:

没有答案