2016-10-12 2 views
1

Ich habe stundenlang im Internet gesucht, aber nicht herausgefunden, wie ich mein Problem beheben.Jasmine ignorieren private Funktion in einer ionischen App 1

Hier meine Frage ist:

Ich bin Komponententests meinen Controller mit einigen Anrufen zu anderen Diensten, aber in meinem Controller Ich habe eine private Funktion:

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

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

Ich bin fest direkt an Diese Codezeile seit dem Aufruf der nativen App cordova. Ich konnte es nicht auf die Probe stellen.

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

So ist meine Frage, wie mein Test, dass die Code-Zeile ignorieren zu machen oder ist es bessere Möglichkeiten, um mit privaten Funktionen umgehen kann, ohne Code-Struktur zu ändern?

Edit: Das ist, wie ich den Unit-Test einrichten

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

Können Sie Ihren Testcode posten? Ich suche speziell, wie Sie Ihren Controller einrichten, um es zu testen. – MBielski

+1

Spott es einfach. Fügen Sie in Ihrem Test, vielleicht in einem 'beforeEach' oder im Test selbst, Code wie' cordova.InAppBrowser.open = function (Pfad, etwas, was auch immer) {}; '. Dann wird der Standardcode nicht ausgeführt werden ... –

+0

- MBielski bitte überprüfen Sie es Ich habe es gerade –

Antwort

0

Nein, Sie nicht tun können, und dass nicht einmal beraten. Und es ist nicht möglich, private Funktionen zu testen, eine Lösung ist, dass, wenn diese Funktion von einer anderen Funktion aufgerufen wird, Sie Ergebnisse dort drüben testen können.

+0

Könnten Sie bitte meinen Beitrag wieder lesen. Es gibt ein Missverständnis hier –

Verwandte Themen