ジャスミンを使用してコントローラをテストしようとしています。基本的に、コントローラが作成されると、http要求を行うためのサービスが呼び出されます。私は偽のデータを取得するためにhttpBackendを使用しています。テストを実行しようとすると、常に「フラッシュする要求がありません」というエラーが表示されます。 httpBackend.flush()を削除すると、controller.data.nameが定義されていないためテストが失敗します。それがどうして起こるのか誰にでも知ることができますか?ありがとう。ngMockE2EにhttpBackend flushを使用できません
モジュールのコードはここにある:
var myModule = angular.module('myModule', ['ngMockE2E']);
myModule.run(function($httpBackend){
$httpBackend.whenGET('/Person?content=Manager').respond(function(){
var response = {'name':'Bob','age':'43'}
return [200,response];
})
});
サービスのためのコード:
myModule.factory('myService',function($http){
return {
getData: function(position){
return $http.get('/Person?content='+position);
}
}
});
コントローラのためのコードは次のとおり
myModule.controller('myController',function(xrefService){
var _this = this;
_this.data ={};
_this.getData = function(position){
myService.getData(position).then(function(response){
_this.data = response.data
});
}
_this.getData("Manager");
})
テストするためのコードコントローラは:
describe("Test Controller",function(){
var controller,httpBackend,createController;
beforeEach(module('myModule'));
beforeEach(inject(function($controller,$httpBackend){
createController = function(){
return $controller('myController');
}
httpBackend = $httpBackend;
}));
it("should return data",function(){
controller = createController();
httpBackend.flush();
expect(controller.data.name).toEqual("Bob");
});
})
ありがとうdanday74、それは今動作します。しかし、テストメソッドでexpectGET()、respond()を使用することを避けることができればとにかく思っています。それ以来、私はコントローラをテストするためにサービスコードを読む必要があります。例えば、おそらくcontroller.dataが空でないかどうかをテストしたいのです(バックエンドからデータを受け取ることを意味します)。 – Steven
あなたは思考:)ええ、あなたはジャスミンスパイを使いたいと思っています。 http://ng-learn.org/2014/08/Testing_Promises_with_Jasmine_Provide_Spy – danday74
spyOn(myService、 'getData')。および。callFake(function(){ var def = $ q.defer(); def.resolve(YOUR_MOCK_HTTP_RESPONSE); return def.promise; }); \t expect(myService.getData).toHaveBeenCalled(); – danday74