我已经做了一些Cordova插件,我想在上面编写单元测试。这个想法是,例如,当我运行cordova build android之后,测试文件将被移动到Android上的正确文件夹中,并且我可以使用Java运行测试。有可能吗?
我已经看到一些插件可以测试Cordova插件,例如cordova插件测试框架。这里的问题是它仅测试调用和回调。例如,不可能模拟对象。例如,我有一个用于跟踪GPS的插件,我想对其进行测试。
我也想测试iOS方面。
答案 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-framework
或cordova-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
的形式运行。
我很确定可以将相同的概念应用于插件测试。
(请让我知道您是否尝试过,并且确实可行!)