jasmineとjQueryを使用してDOMでイベントをテストしようとしています。 テーブルに行を追加するという極端な方法で単純化しました。テーブルに行を追加するとジャスミンテストに反映されない
jQuery("#myTableId tr").length
//returns 0
jQuery("#myTableId").append("<tr></tr>")
jQuery("#myTableId TR").length
//returns 1
しかしとき:私が直接ブラウザコンソールでこれを行う場合は、それが動作 (私は、誰もが、それは私も前に試してみましたbeforeEachは、ロードされていない示唆しているだけの場合には、テーブルをロードし、それが定義されます)私のテストでは、私は書いています:
it("Should have no rows in the beginning ", function() {
expect(jQuery("#myTableId tr").length).toBe(0)
});
//WORKS because the table has no rows
it("Should add a row when I ADD A ROW ", function() {
jQuery("#myTableId").append("<tr></tr>")
expect(jQuery("#myTableId tr").length).toBe(1)
});
//FAILS because it didn't append anything
これは既知の動作ですか? 何か間違っていますか?
EDIT:さらに読者のために 、ユーザー@flowtronが指摘するように:
it("Should EXIST ", function() {
expect(jQuery("#myTableId").length).toBe(1);
});
//FAILS
it("Should EXIST ONLOAD ", function() {
expect(jQuery(document).ready(jQuery("#myTableId")).length).toBe(1);
});
//PASS
DOMは間違いなく確立されている - 私は意味、あなたは体でこれを実行しています.onLoad?またはjQuery(function(){/ *ここで* /}); ???だからjQuery( "#myTableId")。長さは!= 0、はい!?! – flowtron
ありがとう!あなたは完全に正しいです、それはまったくロードされていません、この速いハックは行く方法を証明しました!: それは "存在するべきです"、function(){ expect(jQuery( "#myTableId")。length).toBe( 1); }); //は それ( "ONLOADが存在すべき"、関数()は失敗{ 期待(jQueryの(ドキュメント).ready(jQueryの( "#caseListTableを"))の長さ).toBe(1);} // PASS –