akahukuReplyというわけでテストを書く。文法に基づいてモジュールを分けてある。ここで問題が出てくる。対応が行き届いていない。使ったソースを渡してもエラーになる。その辺をどうするかはまさに議論中のようだ。トランスパイルした上でそれをテストするモジュールをダイナミックロードする前2者はワークアラウンドにしては大掛かりになるので、最後の奴で行ってみよう。エディタが使いにくい。テストをすべて終えると最後に結果が表示される。(internal/process/next_tick.js:103:7)見てのとおり殆どがスタックトレースの情報なのだ。こんなのいらないよ...。内部のスタックトレースは普通はいらない。ex;}なんてコードが考えられる。プロパティが書き換えられていいの?)、これでやってみてもスタックトレースは空にならない。いじるので、スタックトレースは空にならない。そのへんを何とかするオプションがあるのかはまだ調べてない。削ぎ落とすことくらいしか思いつかない。色とりどりのテスト結果ではなくなってしまうが、まあ個人的にはあれはちょっと華美すぎだと思うので、これはこれでいいかな...。akahukuReplywasaviの機能テストは今javaで書いているのだがjavaでなければならない理由は別にない。javaを選択したのかといえば、かつてはwasaviのビルドにantを使っていたのでそのへんの相性だとか、Seleniumのコード例として割とjavaが多く検索に引っかかるとか、公式のAPIリファレンスがjavadocだったからとか、その程度の理由だ。機能テストの個数が増えてくるとjavaだと困ったことにコンパイルにもそれなりに時間がかかってくるわけでなかなかストレスフルだ。それ以前にテストが全体的に遅い。ブラウザを起動する速度すら遅い。これを期に、スクリプト言語に移行したい。wasavi場合それ自体をJavascriptで書いているのだから、Javascriptに移行するのが自然だ。なによりJavascriptへのバインディングはSeleniumが公式でメンテしているのであんしんあんぜんということだ。ちなみに実はビルドの際に呼び出されるちまちましたスクリプト群も以前はRubyで書いていたのだが全部Javascriptに書きなおした。いうことでJavascriptによるテストコードの基盤を書いているのだが。基盤とはなんのこっちゃというと、各々の記述されたテストはページ上のtextarea、あるいは時にはdiv要素に対してwasaviが起動していることを前提としている。テストの前段階でCtrl+Enterを送出してwasaviを起動させ、実際に起動したことを確認するコード、後段階でwasaviを終了させるコードを挟む必要があるのだ。body;closeWasavi();}なんてふうにテスト自体の先頭の末尾に何がしかの処理を挟むことになる。これはめんどくさいわけで、もうちょっと賢く特定の処理を割りこませたい。なると次の案としては当然setUp()とtearDown()を定義してそこでwasaviを開いたり閉じたりすればよいのである。ここまでは実に普通だ。めんどくさいのはここからだ。テストの中には、textarea要素ではなくcontenteditableなdiv要素とか、あるいはセクション・パラグラフ・センテンスをテストするために予めそのための初期本文が必要であるとか、初期化のタイプにもいくつかのバリエーションがある。そのへんもテスト本体に手を入れることなく1箇所で面倒を見たい。セクションに対するテストであればtestSectionなんとか、ってメソッド名なので、それを利用すればいい。アノテーションでもまあいい。...困ったことにsetUp()にはそういったテスト自体のメタ情報は渡されないのであった。そのかわり、JUnitの場合TestWatcherというクラスがあってテストスイートの進行具合を観測することができるので、これを使う。これがJUnitからmochaへ移行するとどうなるか。setUp()とtearDown()は、beforeEach()とafterEach()という同機能が用意されているので単にそれを使えばいい。困ったことにこれらのメソッドにもテスト自体のメタ情報は渡されないのであった。いうわけでTestWatcherの代替品を探さないといけないのだが、ない。代替品を2つ考えてみると、まずReporterというものがありこれがテスト結果を表示する。これが内包するリスナはテストランナーから送出される各種イベントを受信して、その中にはテストのメタ情報が含まれる。それを使ってテストスイートへリダイレクトする。これのconsは好きなReporterを使えなくなるという点。beforeEach()内で[cci]testNames[/cci]から順々に表明を取り出せばそれは個々のテストを区別できる。これのconsは、必ずしもテストがit()の呼び出し順で実行されるとは限らないという点。いうわけでどちらもイマイチな点がある。