私は何時間もインターネットで検索していましたが、問題を解決する方法を見つけられませんでした。ここで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');
});
})
})
テストコードを投稿できますか?私は具体的にコントローラを設定してそれをテストする方法を探しています。 – MBielski
ちょうどそれを嘲笑。あなたのテストでは、 'beforeEach'やテスト自体に、' cordova.InAppBrowser.open = function(path、something、whatever){}; 'のようなコードを追加してください。その後、デフォルトのコードは実行されません... –
- MBielskiそれをチェックしてください私はそれを投稿しました –