2016-10-12 3 views
1

私は何時間もインターネットで検索していましたが、問題を解決する方法を見つけられませんでした。ここでJasmineがIonic App 1のプライベート関数を無視する

は私の問題です:

私は他のサービスにはいくつかの呼び出しでユニットテストの私のコントローラだが、私のコントローラで、私は民間の機能があります:私は右にこだわっている

  function showFileinAppB(pathFile, id) { 
      cordova.InAppBrowser.open(pathFile, '', ''); 

      if (ctrl.isOnline) { 
       .... 
      } else { 
       ApiService.countViewFile(id); 
      } 
     } 

をこのコードラインは、ネイティブのアプリコードを呼び出すためです。私はテストにそれを注入できませんでした。

cordova.InAppBrowser.open(pathFile, '', ''); 

だから私の質問は、私のテストは、コード行を無視するようにする方法であるか、コードの構造を変更することなく、プライベートな機能に対処するための任意のより良い方法はありますか?

編集:これは私はあなたがそれを行うことはできませんユニットテスト

describe('MyController', function() { 
beforeEach(module('IonicApp')); 

var $controller, 
    $scope, 
    $rootScope, 
    $q, 
    ApiService; 

var cordova; 

var fake = function() { 
    return true; 
}; 

var fakePromise = function() { 
    var deferred = $q.defer(); 
    deferred.resolve('Result'); 

    return deferred.promise; 
}; 

beforeEach(inject(function(_$controller_, $rootScope, _$q_, _ApiService_) { 
    $scope = $rootScope.$new(); 
    $controller = _$controller_('MyController', { 
     $scope: $scope 
    }); 
    $q = _$q_; 
    ApiService = _ApiService_; 

    spyOn(ApiService, 'countViewFile').and.callFake(fake); 

    cordova = { 
     InAppBrowser: { 
      open: function(fd, aa, bb) { 

      } 
     } 
    }; 


})); 

it('Should be available', function() { 
    expect($controller).toBeDefined(); 
}); 

describe('MyController.onViewOnline', function() { 
    it('Should be available and call services', function() { 
     cordova.InAppBrowser.open = function(fd, aa, bb) { 
      return true; 
     }; 

     expect($controller.onViewOnline).toBeDefined(); 

     $controller.onViewOnline('item'); 
    }); 
}) 

})

+0

テストコードを投稿できますか?私は具体的にコントローラを設定してそれをテストする方法を探しています。 – MBielski

+1

ちょうどそれを嘲笑。あなたのテストでは、 'beforeEach'やテスト自体に、' cordova.InAppBrowser.open = function(path、something、whatever){}; 'のようなコードを追加してください。その後、デフォルトのコードは実行されません... –

+0

- MBielskiそれをチェックしてください私はそれを投稿しました –

答えて

0

いいえ]を設定し、それにも勧められない方法です。 プライベート関数をテストすることはできません。一つの解決策は、その関数が他の関数から呼び出されていれば、その上で結果をテストできるということです。

+0

私のポストをもう一度読んでください。ここにいくつかの誤解があります –

関連する問題