2012-04-12 2 views
0

저는 QUnit에서 매우 새롭습니다. 간단한 자바 스크립트 함수를 선택하여 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; 
} 

그것은하는 선택 필드를 만들고 부모에 추가합니다은, (A JQuery와 플러그인 사용) 여기에 몇 가지 옵션을 추가하고 전달 무엇이든지에 기본 값을 설정 나는 노력하고 있습니다. 이 함수에 대해 두 개의 테스트를 작성합니다. 하나는 value가 널인 경우이고, 다른 하나는 value가 일부 문자열 일 때입니다. 필드의 값을 검사하기위한 테스트의 가정. 여기

내가 뭘하려 : 모든

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로 디버깅 한) 값을 볼 수 없다 (필자가 내 함수에서 만든 요소를 ​​제공하는지조차 모르겠다). 나는 심지어 내 주요 기능에서 요소를 반환하려하지만 여전히 작동하지 않습니다. 나는 혼란스럽고 좌절했다. 내 자바 스크립트 테스트 단위를 작성하고 싶지만, 거의 포기하고 싶어합니다. 도움?!

답변

1

요소가 페이지에 삽입되지 않았지만 div 내에 생성되었으므로 $('#umbi')은 문서 내부를 볼 때와 같이 작동하지 않습니다.

여기에서 $('#umbi', parent)은 부모 컨텍스트에서 해당 요소를 검색하며 요소가 DOM의 일부가 아니더라도 작동합니다.

그러나 테스트의 경우에만 div.childNodes[0]을 통해 액세스 할 수있는 단일 항목 만 삽입하면됩니다.

+0

도움을 주셔서 감사합니다. 몇 걸음 더 나아졌습니다. 이제 남은 문제는 'key1'과 같은 값을 전달하면 함수의 if 블록으로 들어가서 elem의 값을 설정하는 것처럼 보이지만 FireBug에서 디버깅 할 때 값은 여전히 ​​남아 있습니다. "", 그리고 그것은 내가 시험에서 얻고있는 것입니다. – user1329167

+0

함수의 값 할당이 잘못되었다고 생각합니다. 당신은 값을 가지지 않는 select 요소를 생성합니다 (jQuery $ (select) .val()는 그 것처럼 소리가납니다), 값을 포함하는 옵션 대신 select는 단지 당신에게 selectedIndex만을 제공 할 수 있습니다. 그래서 기본 옵션을 선택하기 위해 지정하고자하는 것은 elem1.selectedIndex입니다 (그러나 이것은 배열 키이며 옵션은 케이스의 객체로 전달됩니다) – GillesC

+0

있습니다. 사실, 당신이 언급 했으므로, 나는 또한 디버그 모드에서'$ ("#"+ elemid) .addOption (collection, false); '이 내 컬렉션을 선택 옵션 목록에 추가하지 않습니다. (이제는이 코드를 UI에서 테스트 한 결과, 테스트 케이스를 작성하는 것이 더 교육적이라는 사실을 알았습니다.) 그래서 나는 테스트 스크립트에서 실행될 때 커스텀 플러그에 다른 문제가있을 것이라고 생각한다. 어쨌든, 나는 계속 노력할 것이다. 다시 감사합니다. – user1329167