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');
});
})
})
Können Sie Ihren Testcode posten? Ich suche speziell, wie Sie Ihren Controller einrichten, um es zu testen. – MBielski
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 ... –
- MBielski bitte überprüfen Sie es Ich habe es gerade –