2016-10-24 10 views
0

私はジャスミンの初心者です!ジャスミンでの処理に失敗しました

次のように私は次のコード

function getSomeData() { 
      return $http(
        { 
         method: 'GET', 
         url: $localStorage.serverName + 'w_service_json.get_wf_proc?pn_login_id=' + sessionService.getUserId() 
        }).then(function (response) { 
           var lv_json = JSON.stringify(response.data); 
           var myArr = JSON.parse(lv_json); 
           return myArr; 
          }).catch(function (err) {//console.log(err); 
           var val = err.message || (err.status==-1?'server error':'error'); 
           errService.add(val); 
           return err; 
          }); 
     } 

とエラー処理サービス(errService)でサービスを持っている:

angular 
     .module('err') 
     .service('errService', errService); 

    errService.$inject = ['$mdDialog']; 
    function errService($mdDialog) { 
     var self = this; 
     var erros=[]; 
     self.add = add; 
     self.show = show; 

     return self; 

     function add(err) 
     { 
      erros.push(err); 
      throw err; 
     } 

私は私ので、サービスがエラーを処理していることを確認する必要がありますジャスミンでテストしました:

beforeEach(inject(function (_errService_,_$rootScope_,_sessionService_,_wfActivitiesRemoteService_,_$localStorage_,_$state_, $httpBackend) { 

    $scope=_$rootScope_; 
    errService=_errService_; 
    wfActivitiesRemoteService = _wfActivitiesRemoteService_; 
    state=_$state_; 
    $localStorage=_$localStorage_; 
    $localStorage.serverName="http://someserverip/"; 
    sessionService=_sessionService_; 
    httpBackend = $httpBackend; 
    httpBackend.whenGET(/\.html$/).passThrough(); 

    })); 

    it("sem sessao", function() { 

    spyOn(sessionService, "getUserId").and.returnValue(""); 

    httpBackend.expectGET('http://someserverip/w_service_json.get_wf_proc?pn_login_id=').respond(-1,errServer); 

    var test=function(data) 
    { 
      expect(data).toEqual(''); 
      console.log("test"); 
    }; 
    var fail=function(err) 
    { 
     expect(err).not.toBeUndefined(); 
     console.log("fail"); 
    }; 

    var run=function() 
    { 
     wfActivitiesRemoteService.getSomeData().then(test).catch(fail); 
    }; 

    expect(function() {wfActivitiesRemoteService.getSomeData}).toThrow('server error'); 
    run(); 

    httpBackend.flush(); 


}); 

私は関数内で入力することはできません!サービスの約束は失敗し、テストは自動的にテストの中のキャッチに入ることなく失敗します!

どうすればこの問題を解決できますか? これを解決する正しい方法は何ですか?

+0

これを行う正しい方法は '$ httpBackend.whenGET()'を使って、あなたのキャッチにヒットするように応答する方法を伝えることです。 https://docs.angularjs.org/api/ngMock/service/$httpBackend#whenGET – tehbeardedone

+0

「toThrow」アサーションの使用は正しくありません(getSomeDataがそこで呼び出されないという事実の他に)。拒否された約束は投げない。 – estus

+0

getSomeDataはtypoのbeacauseと呼ばれていませんでした。ごめんなさい! – davidmr

答えて

0

解決策が見つかりました!例外は、テストではなく、約束でキャッチする必要がありました!だから、私は、コードを変更する必要がありました:

var test=function(data) 
    { 
     console.log("test:"+data); 
     expect(data).toEqual(''); 

    }; 
    var fail=function(err) 
    { 
     console.log("fail"); 
     expect(err).not.toBeUndefined(); 
     expect(err).toEqual('server error'); 

    }; 
    var run=function() 
    { 
     console.log('run'); 
     wfActivitiesRemoteService.getSomeData().then(test).finally(done); 
    }; 
    try 
    { 
     spyOn(sessionService, "getUserId").and.returnValue(""); 

     httpBackend.expectGET('http://someserverip/w_service_json.get_wf_proc?pn_login_id=').respond(-1,errServer); 
     run(); 
     httpBackend.flush(); 
    } 
    catch(err) 
    { 
     console.log("catch"); 
     fail(err); 
    } 
    finally 
    { 
     console.log("finally"); 
     done(); 
    } 

私はおそらくまだ約束でそれをテストする方法がありますが、このように私はすでにキャプチャし、エラーをテストすることができるよと思います。

関連する問題