2

好的,我很确定这真的很奇怪 - 我不知道发生了什么......

代码如下。

我在可能是有史以来最简单的 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",所以如果我能让模拟在正确的位置运行,我应该很高兴。有人知道这里到底发生了什么吗?

规范.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" );
    });
});

供应商.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;
};

感谢您的智慧...

4

0 回答 0