2017-04-06 10 views
0

angularJsアプリでaboutServiceをジャスミンでテストしたいと思います。サービスリターンについて、次の形式でデータ:aboutServiceSpecでJasmineでは、静的データに対するサービスレスポンスのテスト方法

var companyObject = [{"CompanyName": "A", "Contact Number" : "123456789"}, {"CompanyName": "B", "Contact Number" : "1234567899"}] 

angular 
    .module('TestModule') 
    .factory('aboutService', aboutService); 

    aboutService.$inject = ['$rootScope', '$http']; 

    function homeService($rootScope, $http) { 
     function getAboutData() { 
      return $http({ 
       method: "GET", 
       url: API URL, 
      }) 
      .then(getAboutDataSuccess); 

      function getAboutDataSuccess(results) { 
       return results;//Data about company telephone contact number in array 
      } 
     } 

     var aboutService = { 
      getAboutData: getAboutData, 
     }; 
    } 

は、私は変数companyObject

に等しいために、配列の長さ、つまりAPIによって返されたデータが0より大きいかどうかをテストしたいと等しいです

次のコードをJasmineで試しましたが、動作しません。このコードは何

describe("Service: aboutService", function() { 

     var aboutService, $httpBackend, $rootScope, response; 
     var companyObject = [{ "CompanyName": "A", "Contact Number": "123456789" }, { "CompanyName": "B", "Contact Number": "1234567899" }] 
     beforeEach(module('TestModule')); 

     beforeEach(inject(function (_$httpBackend_, _aboutService_, _$rootScope_) { 
      $httpBackend = _$httpBackend_; 
      aboutService = _aboutService_; 
      $rootScope = _$rootScope_; 
     })); 

     it('Should get about details of comapny', function() { 
      $httpBackend.expectGET('URL'); 
      //Donot know how to go forward from here 
     }); 
    }); 
+0

使用$ httpBackend –

+0

@ DanielA.White:私が試し '$ httpBackend'私は質問で述べたように。しかし、それをどのように進めるのかは分かりません。あなたは少し説明できますか? – Quest

答えて

1
$httpBackend.expectGET('URL').respond(companyObject); 
aboutService.getAboutData().then(function(result) { 
    expect(result).toEqual(...); //or whatever expectation you want to test 
}); 
$httpBackend.flush(); 

EDITは以下の通りです:

  1. $httpBackend.expectGET(...).respond(...)は、テスト対象のコードを要求したものの期待 を定義し、
  2. その 要求に対する応答を皮肉っpromisによって返された サービスにチェーンされているブロック.thenへの期待電子
  3. $httpBackend.flush()は以前(今だけ.thenブロックでの期待が発射される)指定されたモックオブジェクトと 約束を解決します(この時点では、 $http要求の約束はまだ解決されていません)。また、予想される要求が がなされていない場合、テストを無効に 副作用があり
+0

あなたは***なぜこれが解決策なのか、いくつかの追加説明をしてもらえますか? –

+0

@crizzis:$ httpBackend.expectGET( 'URL')**は実際にサービスを呼び出す**ではなく、静的オブジェクトを返します。そして、この静的オブジェクトを別の静的条件に対してテストします。だから、私たちは何もテストしていません。 – Quest

+0

本当にありません。 'aboutService.getAboutData'は、' $ http'への呼び出しが返すものを返します( '$ http'を呼び出して何も返さない可能性があります。その場合、テストは失敗します)。 )。もっと重要なのは、 '$ http 'リクエストが* *であることを確認していることです(そうでなければ' $ httpBackend.flush'が失敗します)。明らかにテストは「ダム」ですが、方法も同じです。実際のロジックは実行されません。 – crizzis

関連する問題