memoこの広告は、90日以上更新していないブログに表示しています。(Node.js/WebSocketsコース)3日目のhokacchaです。Node.jsのテストフレームワーク、mochaについて書きます。mochaはTJが新しく作り始めているテストフレームワークです。ドキュメントを見ればできることは大体書いてありますので、ドキュメントを元にどういうことができるのかを解説していきます。現時点でのバージョンは0.2.0です。http://visionmedia.github.com/mocha/shouldについてまずmochaでどういうことができるかの前にshouldについて解説しておきます。mochaのドキュメントには特に説明もなくshouldが使われていて、shouldでどういうことができるかわかってないと、ドキュメントを読んだときにmochaの機能なのかshouldの機能なのかがわかりにくくなるからです。https://github.com/visionmedia/should.jsshouldは一言でいうとassertの拡張です。基本的にはテストフレームワークと組み合わせて使うことになります。こんな書き方ができるようになります。20);point.should.not.have.property('z');見てわかるとおり、shouldはObject.prototypeを拡張します。require('should')で返ってくるオブジェクトはassertに一部の機能を追加したものなので、このように書くことも可能です。20);should.not.exist(point.z);これがshouldの基本的な機能です。他にも色々メソッドとかがあるので詳しくはドキュメントを読んでみるといいと思います。mochaの概要ここから本題。mochaについての話しです。mocha自体にはアサーションの機能はなく、標準のassertやshouldなどを使ってうまいことテストを書けて、結果の出力とかも色々やってくれるのがmochaの役割です。mochaインストールしたらmochaコマンドが使えるようになるので早速テストを書いてみます。(3ms)実行できました。describeとかit辺りがmochaの機能です。テスト自体はassertで行っています。非同期のテストも当然サポートしています。(1006ms)doneが呼ばれるまで次のテストを待ちます。選べるインターフェースmochaの特徴の一つとして、インターフェースにTDD、BDD、exportsを選べるというのがあります。さっきのコードをTDDインターフェースで書いた場合こうなります。});});見てわかる通り、describeがsuite、itがtestとなっているだけです。実際に内部のコードを見ても名前が違うだけでやってることは全く同じです。これを実行するにはコマンドオプションでインターフェースにtddを指定する必要があります。test3.jsexportsもほとんど同じです。}};実行時のインターフェースはexportsを指定します。test4.jsデフォルトのインターフェースはBDDなので何も指定しない場合はBDDとなります。before、afterフックテストの最初や最後に処理を挟みたいことはよくあります。mochaではこんな感じで書きます。afterEach)が分かれているのはかなりいいですね。TDDインターフェースでは、before→suiteSetup、after→suiteTeardown、beforeEach→setup、afterEach→teardownとなるみたいです(suiteSetupとsuiteTeardownはアンドキュメントだけど単なる書き忘れな気がする)様々なレポーターmochaではレポーターもデフォルトで様々なものが用意されています。レポーターってのは出力形式のことです。コマンドラインオプションで様々なレポーターを指定できます。test.jsdotデフォルトはdotというのになっています。テストひとつひとつをドットで表していて、テスト失敗したらドットが赤くなったりとかします。specspecの形式で出力します。個人的には一番見やすい気がします。taptap形式で出力します。id:sugyanも安心ですね。landingテストの経過を飛行機が進んでいく様子で表しています。シャレでいれたみたいです。listシンプルなリスト形式で出力してくれます。progressプログレスバー的なのでテストの経過を表示します。jsonjsonで出力します。テストの結果を使って何かするAPIとかに使うのにはよさげです。json-stream各テストが終わるごとにJSONで結果を出力します。docHTMLで出力します。ドキュメントに載せるときとかに使うのかな。htmlクライアントサイドで使う用みたいです。コマンドラインでやったら$がないって言われました。その他の便利機能mochaはその他にも便利な機能が色々あります。requirerオプションでデフォルトでrequireするモジュールを指定できます。test.jsただ、例えばこれだとshouldをrequireはするけど、require('should');しただけになります。shouldはObject.prototypeを拡張するので、その拡張した機能は使えるんですけど、require('should')で返ってくるオブジェクトを使うことができません。should自体をこんな感じで使いたいこともあるので、結局ファイルごとに書いたほうがいい気もします。require('should');should.not.exist(err);テストファイルの省略mochaはテストの対象ファイルの指定を省略するとデフォルトではtest/*.jsを探してテストします。そのようなディレクトリ構成になっていればこれだけでテストできます。mocha閾値の設定mochaはテストにかかる時間を計測してくれて、設定された閾値より時間がかかったテストを警告してくれます。レポーターをデフォルト(dot)にしてる場合だとドットが黄色くなるのが警告です。あとspceレポーターとかで時間のところが赤くなってるのもこれです。この閾値のデフォルトは75msで、sオプションで指定できます。test.jsタイムアウトの設定tオプションはタイムアウト値を設定します。デフォルトは1000msです。test.jsgrepgオプションでitやdescribeで設定したテキストをgrepしてマッチしたテストだけ実行してくれます。test.jsmocha.optsmochaには様々なオプションがあっていちいち指定するのが面倒な場合、test/mocha.optsというファイルに設定を書いておけば自動で設定を読んでくれるという便利機能があります。mocha.opts.はこんな感じで書きます。5000後で書く実際にテストはまだ書かないけど後で書く予定のものを書いておくことができます。it('後で書くよ');これだけです。出力結果の色も変えてくれるのでわかりやすいです。クライアントサイドサポートmochaはクライアントサイドでの実行もサポートしています。これについてはフレームワークコースのほうで書こうと思います。Assert系のモジュールでchaiとexpect.jsを試した。6はてなブログをはじめよう!hokacchaさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。