2016-07-06 3 views
0

私はユニットテストと角1.2の周りに頭を上げ始めています。 $ httpBackendサービスを使ってサービス内の$ httpcallをテストしています。私は、エンドポイントが間違っているときのためのテストを記述しようとしています

var app = angular.module('myApp', []); 

app.controller('MainCtrl', function (someService) { 
    var vm = this; 
    vm.hasError = false; 

    //debugger; 
    someService.someAsyncCall() 
     .then(function (data) { 
      vm.hasError = false; 
     }) 
     .catch(function (data) { 
      vm.hasError = true; 
     }); 
}); 

app.factory('someService', function ($http) { 
    return { 
     someAsyncCall: function() { 
      return $http.get("/data") 
       .success(function (data) { 
        //return true 
       }) 
       .error(function() { 
        console.log('error'); 
        //return false 
       }); 
     } 
    }; 
}); 

:このサービスは、私のコントローラ内部で呼び出され

MainCtrlテストはhasErrorを設定する必要があります。

beforeEach(function() { 
     someServiceMock = jasmine.createSpyObj('someService', ['someAsyncCall']); 
     module('myApp'); 

     inject(function ($rootScope, $controller, $q, _$timeout_,$httpBackend) { 
      $scope = $rootScope.$new(); 
      someServiceMock.someAsyncCall.andReturn($q.when('weee')); 
      $timeout = _$timeout_; 
      controllerService = $controller; 
      httpMock = $httpBackend; 
     }); 
    }); 


    it("should set hasError=true with error request", function() { 
     httpMock.expectGET("/datajfds").respond(false); 
     ctrl = controllerService('MainCtrl', {someService: someServiceMock}); 
     expect(ctrl.hasError).toBe(true); 
    }); 

これは誤りでありますエラー要求ではtrue。

Expected false to be true. 
Error: Expected false to be true. 
    at new jasmine.ExpectationResult (http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js:114:32) 
    at .toBe (http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js:1235:29) 
    at .<anonymous> (http://run.plnkr.co/Q77IyPb6agUqgR2U/specs.js:37:31) 

基本的に私はsomeService.someAsyncCall()がエラーをキャッチしますときのためにテストを書く/カバレッジを取得したいと思います。 ctrl.hasError = trueになるようにこのテストを書くにはどうすればよいですか?

plunkr:http://plnkr.co/edit/aX29h4k64ZUm6hDedZl6?p=preview

答えて

0

あなたがやっていたと私はあなたが3番目のテストでやろうとしているのか理解していないものとの問題がたくさんありました。あなたがヒットしたAPIは、サービスで設定されます。

$http.get("/data") 

あなたがやろうとしたテストということであるかもしれないこのplunkerを参照してください。いくつかの問題:

あなたはあなたのサービスコールは何を返していませんでした

を必要としていなかった多くのことを注入しました。あなたは、サービスコール

+0

良い努力から値を取得していなかった

、ただ一つの質問:最後のスペックvm.hasErrorについては、その後()一部かかわらず設定されます。 catch()の部分をたどることになっています。参照:http://plnkr.co/edit/EoIgQuoeIwD5eP0JLXIn?p = preview –

+0

キャッチは、ヒットしようとしているサービスがエラーを返した場合にのみ実行されます。つまり、エラーのためにサービスが応答できません。 $ httpBackendを使ってエラーをスローするサービスを得る方法を示すために、3番目のテストを更新しました。 – ScottL

関連する問題