わかりました、これは本当に奇妙な動作だと確信しています - そして何が起こっているのか分かりません...
以下のコード。
おそらくこれまでで最も単純な AngularJS コントローラーで Jasmine 仕様を実行しています。これは、初期化時に関数 (getSuppliers) を呼び出し、次に $httpBackend を使用してモックした http get 要求を作成します。実際にテストを実行すると、奇妙なことが起こります。で失敗しExpected undefined to equal 'list of suppliers'
ます。
そのため、いくつかdebugger;
の s (1 と 2) にとどまり、Chrome で仕様を実行しました。これは奇妙な部分です。Debugger 2 は Debugger 1 の前にヒットします。つまり、モックが魔法のように機能する前に、 getSuppliers 関数が の値を返しますundefined
。記録として、続けてデバッガー 1 も起動すると、 data の値は の正しい値になります"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" );
});
});
サプライヤー.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;
};
知恵をありがとう...