好的,我很确定这是非常奇怪的行为 - 我不知道发生了什么......
以下代码。
我正在运行一个关于可能是最简单的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;
};
感谢任何智慧......