模拟AngularJS XHR使用Jasmine进行测试的请求

时间:2013-05-14 11:19:18

标签: angularjs xmlhttprequest jasmine

好的,我很确定这是非常奇怪的行为 - 我不知道发生了什么......

以下代码。

我正在运行一个关于可能是最简单的AngularJS控制器的Jasmine规范,它在初始化时调用一个函数(getSuppliers),这反过来产生一个http get请求,我用$ httpBackend模拟了它。当我实际运行测试时会发生奇怪的事情。它失败了Expected undefined to equal 'list of suppliers'

所以我坚持了一些debugger; s(1和2)并在Chrome中运行了规范。这是奇怪的部分。调试器2在调试器1之前被命中,这意味着在模拟甚至有机会实现它的魔力之前,getSuppliers函数返回值undefined。为了记录,当我继续并让调试器1出现时,数据具有正确的"list of suppliers"值,所以如果我可以让模拟在正确的地方运行,我应该是甜蜜的。任何人都知道这到底是怎么回事?

spec.js

describe("Supplier Controller", function(){
    ctrl = null;
    scope = null;
    httpBackend = null;
    supplierController = null;

    beforeEach(inject(function($controller,$rootScope,$httpBackend) {
        scope = $rootScope.$new();
        ctrl = $controller;
        httpBackend = $httpBackend;

        httpBackend.expectGET('/suppliers.json').respond("list of suppliers");
        supplierController = ctrl('supplierCtrl', { $scope: scope});
        $httpBackend.flush();
    }));

    it("gets a list of suppliers", function(){
        expect(scope.suppliers).toEqual( "list of suppliers" );
    });
});

supplier.js

function supplierCtrl($scope, $http) {
    $scope.suppliers = getSuppliers($http);
}

function getSuppliers($http){
    var suppliers;
    $http.get('/suppliers.json').success(function(data) {
        debugger; // Debugger 1
        suppliers = data;
    }).error(function(){ suppliers = "something else"; } );
    debugger; // Debugger 2
    return suppliers;
};

感谢任何智慧......

0 个答案:

没有答案