さて、本が出た今頃になって言うのも何なんですが、
p.227
(はてな日記の)プレビューの機能ではAjaxが使われており、プレビュー内容を表示するのにわずかですが時間がかかります。……表示が完了する前に次の verifyTextPresent を実行してしまう場合があります。……それを防止するために、pause で1秒間(1000ミリ秒)待たせています。
clickなどの操作のあとにpauseやwaitForXXXで同期してやるという話なわけですが、なんとこれclickAndWait一発でできるんですね。いやー、知らなかったなー。はっはっは。前からそうだっんだろうか?
まあ、一般論として「Ajax(というか非同期)の処理をテストするときは、テスト側で同期しないといけない」というのは変わらないんですけどね。とはいえ、単純な
- クリックなどのハンドラが呼ばれる
- XHRする
- ハンドラ終了
- XHRのレスポンスのハンドラが呼ばれる
- レスポンスを画面に反映
- ハンドラ終了
という処理の結果を、clickAndWait(というかXXXAndWaitシリーズ)でテストできるならラクだなあ。Seleniumの実装とか、アプリ側の実装にも依存するので、100%はカバーできないんじゃないかと思うけれど。
(追記)プレビューはiframeを使ってるみたいなので、それのonloadに反応してるのかな?そうだったら、応用範囲は狭くなっちゃうなあ。