我需要用jasmine对一些DOM操作函数进行单元测试(目前我在浏览器和Karma中运行我的测试)
我想知道这样做的最佳方法是什么?
例如,我可以模拟和存根窗口并记录对象并监视它们的一些功能.但这并不是一个简单的解决方案,所以这就是为什么我问这个问题!
或者是否有更好的方法(不使用茉莉花)来做到这一点?
非常感谢
你如何进行单元测试使用和修改DOM的javascript?
我举一个简单的例子.一个表单验证器,用于检查用javascript编写并使用JQuery的空白文本字段.
function Validator() {
this.isBlank = function(id) {
if ($(id).val() == '') {
return true;
} else {
return false;
}
};
this.validate = function(inputs) {
var errors = false;
for (var field in inputs) {
if (this.isBlank(inputs[field])) {
errors = true;
break;
}
}
return errors;
};
}
Run Code Online (Sandbox Code Playgroud)
用法:
var validator = new Validator();
var fields = { field_1 : '#username', field_2 : '#email' };
if (!validator.validate(fields)) {
console.log('validation failed');
} else {
console.log('validation passed');
}
Run Code Online (Sandbox Code Playgroud)
尝试对此类单元进行单元测试的最佳做法是什么?
我正在写一些简单的茉莉花测试,我得到一个例外,因为我正在测试的代码正在寻找一个不存在的表单,因为在测试js文件时没有DOM:$("form")[0]在测试的js文件中导致:
TypeError: $(...)[0] is undefined
Run Code Online (Sandbox Code Playgroud)
我读了一下jasmine-jquery,并意识到我可以使用一些外部html文件的html fixture.这个流程似乎非常混乱,因为我只需要添加一个空的有效表单,以便测试(专注于其他内容)将会运行,<form></form>我认为附加就足够了.
起初我认为sandbox()函数将是解决方案,但它似乎只创建div,我需要一个表单.
通过仅使用jasmine规范文件中的代码添加一些元素的任何简单方法?
背景:
我来自Java背景,所以不太熟悉Javascript.
我们计划对现有(遗留)代码和未来工作引入JavaScript单元测试.我们主要是一家java商店(Spring,Weblogic等).
我们正在寻找能够与IDE(IntelliJ构思)和声纳良好集成的选项,以及能够将它们作为持续集成的一部分运行.
JsTestDriver似乎勾选了所有方框.
题:
我们现有的许多javascript代码是a)嵌入在JSP中,b)利用jQuery直接与页面元素进行交互.
我们应该如何测试严重依赖于DOM的函数.这是我正在谈论的函数的一些代码示例:
function enableOccupationDetailsText (){
$( "#fldOccupation" ).val("Unknown");
$( "#fldOccupation_Details" ).attr("disabled", "");
$( "#fldOccupation_Details" ).val("");
$( "#fldOccupation_Details" ).focus();
}
Run Code Online (Sandbox Code Playgroud)
要么
jQuery(document).ready(function(){
var oTable = $('#policies').dataTable( {
"sDom" : 'frplitip',
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "xxxx.do",
"sPaginationType": "full_numbers",
"aaSorting": [[ 1, "asc" ]],
"oLanguage": {
"sProcessing": "Processing...",
"sLengthMenu": "Show _MENU_ policies",
"sZeroRecords": "No matching policies found",
"sInfo": "Showing _START_ to _END_ of _TOTAL_ policies",
"sInfoEmpty": "Showing 0 to 0 of 0 policies",
"sInfoFiltered": "(filtered from …Run Code Online (Sandbox Code Playgroud)