2012-04-12 5 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のプラグインを使用して)それにいくつかのオプションを追加し、渡されるものは何でもデフォルト値を設定し、私がしようとしています。この関数の2つのテストを記述します.1つはvalueがnullの場合、もう1つは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でデバッグされた)値は表示されません(私の関数内で作成した要素がわかりません)。私は主な機能から要素を返そうとしたが、まだ機能していなかった。私は混乱し、失望しています。私は私のjavascriptをテストするユニットを作成したいと思いますが、これはほとんど私があきらめたいと思っています。助けて?!

答えて

1

要素がページに挿入されていないがdiv内に挿入されているため、$('#umbi')はドキュメント内を見ているように機能しません。

ここで、$('#umbi', parent)は、親コンテキストでそれを検索し、要素がDOMの一部ではなくても機能します。

しかし、あなたのテストでは、あなたはdiv.childNodes[0]でアクセスすることもできる1つのアイテムだけを挿入します。

+0

ご協力いただきありがとうございました。今私が残っている問題は、 'key1'のような値を渡すと、関数のifブロックに入り、elemの値を設定しているように見えますが、FireBugでデバッグしても値は""それは私のテストでもやっていることです。 – user1329167

+0

あなたの関数の値の割り当てが間違っていると思われます。 select要素は値を持たない(jQuery $(select).val()と同じように発音させる)、値を含むオプションではなく、selectedIndexを提供するだけです。ですから、デフォルトのオプションを選択するために割り当てたいのはelem1.selectedIndexです(これは配列キーですが、オプションはあなたのオブジェクトのオブジェクトとして渡されます) – GillesC

+0

私は参照してください。実際には、あなたが言及したので、私はまた、デバッグモードでは '$("# "+ elemid).addOption(collection、false); 'は選択オプションのリストに自分のコレクションを追加していません。 (今、私はこのコードをUIからテストしたと言いますが、テストケースの書き込みはより教育的です)。だから、テストスクリプトから実行されたときにカスタムプラグインに他の問題があるかもしれないと思う。とにかく、私は試し続けます。ありがとうございました。 – user1329167