Enterを入力した時に更新するテキストボックスのテストの書き方

jQuery で、

$("#target").keypress(function(event) {
  if ( event.which == 13 ) {
    //更新...
  }
};

とか書けるじゃないっすか。13 は [Enter] のキーコードね。

それで、capybara でどうやってテスト書いたもんかなぁと色々試行錯誤して、@さんに教えてもらっちゃったりして、できた:

  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 は数値じゃなくて文字列を指定しないといけないのでした。ちゃんちゃん。