好的,我很确定这真的很奇怪 - 我不知道发生了什么......
代码如下。
我在可能是有史以来最简单的 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;
};
感谢您的智慧...