2012-04-12 76 views
0

我对QUnit非常陌生。选择了一个简单的JavaScript函数来针对它进行qunit测试。下面是函数:QUnit - 基本测试 - 检查字段值

function createSelectField(parent, elemid, value, collection) { 
var elem1 = document.createElement("select"); 
elem1.id = elemid; 
     parent.appendChild(elem1); 
$("#" + elemid).addOption(collection, false); 
if(value != null) { 
     elem1.value = value ; 
} 
var oldvalue = value; 
} 

它创建了一个选择栏,其追加到父,增加了一些选项,它(使用jQuery插件中),并设置默认值无论是在过去,我正在尝试。为这个函数写两个测试,其中一个值为null时,另一个值为一些字符串。测试它的假设来检查该字段的值。

这里是我的尝试:

所有的
module('Test createSelectField'); 
test('createSelectField() with no default value', function() { 
var parent = document.createElement("div"); 
createSelectField(parent, 'umbi', null, {"key1": "value1", "key2": "value2"}); 
var elem = $('#umbi'); 
equal(elem.val(), null, "No default value provided for the drop down"); 

}); 

test('createSelectField() with some default value', function() { 
var parent = document.createElement("div"); 
createSelectField(parent, 'bi', 'key1', {"key1": "value1", "key2": "value2"}); 
var elem = $('#bi'); 
equal(elem.val(), 'key1', "Default to key1 value"); 

}); 

首先,我试图让元素使用的document.getElementById创建的,没有工作,它返回null。使用JQuery选择器似乎让我的元素,但我没有看到值(用FireBug调试)(我甚至不知道它给了我在我的函数内创建的元素)。我甚至试图从我的主要功能返回元素,但仍然无法正常工作。我很困惑和f。。我想写单元测试我的JavaScript,但这几乎让我想放弃。帮帮我?!

回答

1

因为您的元素没有插入到页面中,而是在创建了CSS查询的div内,因此无法像查看文档一样工作。

其中$('#umbi', parent)将在父上下文中搜索它,并且即使该元素不是DOM的一部分也将工作。

但是至于你的测试,你只插入一个单一的项目,你也可以通过div.childNodes[0]访问它。

+0

感谢您的帮助,这让我向前迈了几步。现在剩下的问题是,当我传入像'key1'这样的值时,它会进入函数中的if块,看起来像是在elem上设置值,但是当我在FireBug中调试时,值仍然是“”,这也是我在测试中得到的。 – user1329167 2012-04-12 14:13:05

+0

我怀疑函数中的赋值是错误的。你创建一个select元素,它从来没有一个值(jQuery $(select).val()使它听起来像是有),而它是包含值的选项,select只能为你提供selectedIndex。所以真正想要分配的默认选项是elem1.selectedIndex(这是一个数组键,然而选项作为一个对象传递给你的情况) – GillesC 2012-04-12 14:24:11

+0

我明白了。实际上,现在你提到了,我在调试模式中注意到'$(“#”+ elemid).addOption(collection,false); '不会将我的集合添加到选择选项列表中。 (现在,我应该说这个代码是在UI中测试的,并且工作正常,因为我写的测试用例更具教育意义)。所以我认为从测试脚本执行时,我可能会遇到其他一些自定义插件问题。无论如何,我会继续努力。再次感谢你。 – user1329167 2012-04-12 14:46:52