/ /予期しないリクエストを削除する方法:GET data.json? --angularjs、angularjs-ディレクティブ、angularjs-scope、jasmine、karma-jasmine

削除する方法:予期しない要求:GET data.json? - angularjs、angularjs-directive、angularjs-scope、jasmine、karma-jasmine

私は使用しようとしています $ httpバックエンド 私の$ httpリクエストをテストするには..iAM取得

このエラー

Unexpected request: GET data.json
No more request expected

これが私のテストコードです

beforeEach(inject(function($rootScope,$controller,appfactory,_$httpBackend_) {
$scope = $rootScope.$new();
$httpBackend=_$httpBackend_;
ctrl = $controller("cntrl", {$scope: $scope});
fac=appfactory;
modeSpy= spyOn(fac, "mode").and.returnValue("a");

}));



it("test true value",function(){
expect(true).toBeTruthy()
})

it("check message value",function(){
$scope.toggle();
expect($scope.message).toEqual("naveen")
})

it("tracks that the spy was called", function() {
//expect(fac.setValue).toHaveBeenCalled();
var response=[{"name":"naveen"},{"name":"parveen"}]
$httpBackend.expectGET("data.json").respond(response);
$scope.getData();
$httpBackend.flush();

expect($scope.data[0].name).toEqual("naveen")
});

ここに私のコードです http://plnkr.co/edit/zdfYdtWbnQz22nEbl6V8?p=preview

このエラーを削除するための解決策

I have this controller
.controller("cntrl",function($scope,appfactory,$http){

$scope.data=[];
appfactory.setValue("test abc");

$scope.getData=function(){
$http.get("data.json").success(function(data){
console.log(JSON.stringify(data))
$scope.data=data;
}).error(function(data){
console.log(JSON.stringify(data))
})
}
$scope.getData();
$scope.toggle=function(){
if(appfactory.mode()=="a"){
$scope.message="naveen"
}else {
if(appfactory.mode()=="b"){
$scope.message="parveen"
}
}
}

})

この行をコメントアウトすると $ scope.getData(); またはこの行を削除します $ scope.getData(); その後、私のテストは合格であり、このエラーを取り除くことができます。 なぜこのエラーが発生したのですか?コントローラで関数を使用できない場合、この関数のテストの使用は何ですか?

回答:

回答№1は0

呼び出しているためにコントローラーを初期化するとき $scope.getData(), data.json フェッチされます。したがって、テストでコントローラーを初期化する場合、コントローラーを初期化するたびにその要求をモックする必要があります。

これを克服する1つの方法は、追加することです ng-init="getData()" このコントローラーを使用してhtml要素にデータをフェッチします。これにより、データがフェッチされますが、コントローラーの初期化時ではなく、htmlからの要求があった場合にのみフェッチされます。