如何使用Junit对Cordova插件进行单元测试?

时间:2018-08-02 10:03:38

标签: android ios cordova cordova-plugins

我已经做了一些Cordova插件,我想在上面编写单元测试。这个想法是,例如,当我运行cordova build android之后,测试文件将被移动到Android上的正确文件夹中,并且我可以使用Java运行测试。有可能吗?

我已经看到一些插件可以测试Cordova插件,例如cordova插件测试框架。这里的问题是它仅测试调用和回调。例如,不可能模拟对象。例如,我有一个用于跟踪GPS的插件,我想对其进行测试。

我也想测试iOS方面。

1 个答案:

答案 0 :(得分:0)

您在研究中对,Cordova Core插件的当前测试全部使用/** * ng-virtual-keyboard * An AngularJs Virtual Keyboard Interface based on Mottie/Keyboard * @version v0.3.3 * @author antonio-spinelli <antonio.86.spinelli@gmail.com> * @link https://github.com/antonio-spinelli/ng-virtual-keyboard * @license MIT */ (function (angular) { angular.module('ng-virtual-keyboard', []) .constant('VKI_CONFIG', { }) .service('ngVirtualKeyboardService', ['VKI_CONFIG', function(VKI_CONFIG) { var clone = function(obj) { var copy; // Handle the 3 simple types, and null or undefined if (null === obj || 'object' !== typeof obj) { return obj; } // Handle Date if (obj instanceof Date) { copy = new Date(); copy.setTime(obj.getTime()); return copy; } // Handle Array if (obj instanceof Array) { copy = []; for (var i = 0, len = obj.length; i < len; i++) { copy[i] = clone(obj[i]); } return copy; } // Handle Object if (obj instanceof Object) { copy = {}; for (var attr in obj) { if (obj.hasOwnProperty(attr)) { copy[attr] = clone(obj[attr]); } } return copy; } throw new Error('Unable to copy obj! Its type isn\'t supported.'); }; var executeGetKeyboard = function(elementReference) { var keyboard; var element = $(elementReference); if (element) { keyboard = $(elementReference).getkeyboard(); } return keyboard; }; return { attach: function(element, config, inputCallback) { var newConfig = clone(VKI_CONFIG); config = config || {}; for (var attr in config) { if (config.hasOwnProperty(attr)) { newConfig[attr] = config[attr]; } } newConfig.accepted = config.accepted || inputCallback; if (config.autoUpdateModel) { newConfig.change = config.change || inputCallback; } if (newConfig.events) { var addEventMethod = function(eventName) { return function(e, kb, el) { newConfig.events[eventName](e, $(this).data('keyboard'), this); }; }; for (var eventName in newConfig.events) { $(element).on(eventName, addEventMethod(eventName)); } } var keyboard = $(element).keyboard(newConfig); if (keyboard && newConfig.extensions) { for (var extension in newConfig.extensions) { var extConfig = newConfig.extensions[extension]; if (extConfig) { keyboard[extension](extConfig); } else { //keyboard[extension](); } } } }, getKeyboard: function(elementReference) { return executeGetKeyboard(elementReference); }, getKeyboardById: function(id) { return executeGetKeyboard('#' + id); } }; }]) .directive('ngVirtualKeyboard', ['ngVirtualKeyboardService', '$timeout', function(ngVirtualKeyboardService, $timeout) { return { restrict: 'A', require: '?ngModel', scope: { config: '=ngVirtualKeyboard' }, link: function(scope, elements, attrs, ngModelCtrl) { var element = elements[0]; if (!ngModelCtrl || !element) { return; } ngVirtualKeyboardService.attach(element, scope.config, function(e, kb, el) { $timeout(function() { ngModelCtrl.$setViewValue(element.value); }); }); scope.$on('$destroy', function() { var keyboard = $(element).getkeyboard(); if (keyboard) { keyboard.destroy(); } }); } }; } ]); })(angular); 来实现在设备上运行的测试,例如cordova-plugin-test-frameworkcordova-paramedic(例如,有关如何使用cordova-mobile-spec触发构建的信息,请参阅GitHub存储库中的CI配置)。

唯一使用“ Java”(适用于Android)和“ Obj-C”(适用于iOS)编写的“常规”单元测试的Cordova项目就是平台。例如,对于Android,该文件夹存在:https://github.com/apache/cordova-android/tree/master/test这些测试可以通过cordova-paramedic运行,也可以通过npm以run_java_unit_tests.js的形式运行。

我很确定可以将相同的概念应用于插件测试。
(请让我知道您是否尝试过,并且确实可行!)