Enterを入力した時に更新するテキストボックスのテストの書き方
jQuery で、
$("#target").keypress(function(event) { if ( event.which == 13 ) { //更新... } };
とか書けるじゃないっすか。13 は [Enter] のキーコードね。
それで、capybara でどうやってテスト書いたもんかなぁと色々試行錯誤して、@nukusuさんに教えてもらっちゃったりして、できた:
page.execute_script(<<-JS) $("#target").attr("value", "ABC"); $("#target").trigger({type: "keypress", keyCode: "13"}); JS
長いこと懸案事項だったので助かりました。
なんで今までできなかったかというと、jQuery の公式ドキュメントが間違っていたから:
// Create a new jQuery.Event object with specified event properties. var e = jQuery.Event("keydown", { keyCode: 64 }); // trigger an artificial keydown event with keyCode 64 jQuery("body").trigger( e );
keyCode は数値じゃなくて文字列を指定しないといけないのでした。ちゃんちゃん。