読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

JSSpecを使ってみる

JavaScriptのテストをそろそろちゃんとしようかな、と思ってテスティングフレームワークを検討中。JavaScriptのxUnit系フレームワークにはあんまりいいのがなかった記憶があるので、BDD系で探してみるとJSSpecがヒット。なかなか良さそうなのでちょっと使ってみました。

ダウンロード

Downloads - JSSpecより、JSSpec20080923.zip をダウンロードして展開。

簡単なサンプル

JSSpecに添付されているサンプルを改変して作成してみました。

  • 振る舞いとかexpectationといったBDD用語は、Rubyist Magazine - スはスペックのスがわかりやすいのでそちらを参照。
  • 本当は、テスト対象クラスは別のファイルになるはずだし、specの部分も別のファイルにしておくのがよいんだろうな。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>JSSpec results</title>
    <link rel="stylesheet" type="text/css" href="jsspec/JSSpec.css" />
    <script type="text/javascript" src="jsspec/diff_match_patch.js"></script>
    <script type="text/javascript" src="jsspec/JSSpec.js"></script>
    <script type="text/javascript">

      // テスト対象のクラス
      Kitten = function( name, age ) {
        this.name = name;
        this.age = age;
      };
      Kitten.prototype = {
        meow : function() {
          return this.name + ":meow!"
        }
      };

      // Kittenの振る舞い定義
      describe(' Kitten ("mii", 1) の場合', {

        // 各expectationの前に呼び出される関数。
        // xUnitにおけるsetUpに該当。
        // 同様に、tearDownに対応するafterも利用できる。
        'before': function() {
          target = new Kitten( "mii", 1 ); 
          // ↑ローカル変数のようだけど、example内でも参照できる。
          // スコープが同じになっているようだ。
        },

        // 実行可能なサンプル (example)。
        'age は 1 になる': function() {
          value_of(target.age).should_be(1); // expectation。should_be()以外にもいろいろ使える。
        },
        'name は "mii" になる': function() {
          value_of(target.name).should_be("mii");
        },
        'meow() は "mii:meow!" になる': function() {
          value_of(target.meow()).should_be("mii:meow!");
        }
      })

    </script>
  </head>
  <body></body>
</html>

実行結果はこちら

ふむ。依存ファイルも少なくてさくっと使えし、なかなかいいんじゃないかと。これを期にBDDもちゃんと勉強するかな。