web-dev-qa-db-ja.com

TDD用のJavaScript単体テストツール

私は多くのJavaScript単体テストおよびテストツールを調べて検討しましたが、完全にTDDに準拠するための適切なオプションを見つけることができませんでした。 TDDに完全に準拠したJavaScriptの単体テストツールはありますか?

717
Mark Levison

カルマ または 分度器

Karmaは、Node.jsを使用して構築された単体テスト用のJavaScriptテストランナーです。

分度器は、エンドツーエンドのテスト用であり、テストを推進するためにSelenium Web Driverを使用します。

両方ともAngularチームによって作られました。どちらのアサーションライブラリでも使用できます。

スクリーンキャスト: カルマはじめに

関連

長所

  • Node.jsを使用するので、Win/OS X/Linuxと互換性があります。
  • ブラウザから、またはPhantomJSでヘッドレスでテストを実行
  • 一度に複数のクライアントで実行する
  • ブラウザを起動、キャプチャ、および自動的にシャットダウンするオプション
  • 開発用コンピュータまたは個別にサーバー/クライアントを実行するオプション
  • コマンドラインからテストを実行する(ant/mavenに統合可能)
  • テストxUnitまたはBDDスタイルを書く
  • 複数のJavaScriptテストフレームワークをサポート
  • 保存時にテストを自動実行
  • ドメイン間のプロキシリクエスト
  • カスタマイズ可能:
    • 他のテストフレームワーク(Jasmine、Mocha、QUnit組み込み)をラップするようにそれを拡張する
    • あなた自身の主張/反論
    • 記者
    • ブラウザランチャー
  • WebStorm用プラグイン
  • Netbeans IDEでサポート

短所

mocha.js

Mocha.jsの機能、長所、および短所についてコメントするのは完全に無資格ですが、JSコミュニティを信頼する人から勧められただけです。

Webサイトで報告されている機能の一覧

  • ブラウザサポート
  • 約束を含む単純な非同期サポート
  • テストカバレッジレポート
  • 文字列差分のサポート
  • テストを実行するためのjavascript#API
  • cIサポートなどのための適切な終了ステータス
  • 非ttyの自動検出とカラーリングの無効化
  • キャッチされていない例外を正しいテストケースにマッピングします。
  • 非同期テストタイムアウトのサポート
  • テスト固有のタイムアウト
  • うなり声の通知サポート
  • テスト期間を報告します
  • 遅いテストを強調する
  • ファイルウォッチャーのサポート
  • グローバル変数リーク検出
  • オプションで正規表現にマッチするテストを実行する
  • アクティブループで「ハング」するのを防ぐための自動終了
  • スイートとテストケースを簡単にメタ生成する
  • mocha.optsファイルのサポート
  • テスト実行をフィルタリングするためのクリック可能なスイートタイトル
  • ノードデバッガのサポート
  • done()への複数の呼び出しを検出します
  • 必要なアサーションライブラリを使用する
  • 9人以上のレポーターにバンドルされた拡張可能なレポート
  • 拡張可能なテストDSLまたは「インタフェース」
  • 各フックの後、それぞれの前、後、前に
  • 任意のtranspilerのサポート(コーヒースクリプトなど)
  • TextMateバンドル

yolpo

yolpo

これはもう存在せず、代わりに sequential.js にリダイレクトします

Yolpoは、JavaScriptの実行を視覚化するためのツールです。 Javascript API開発者は、自分のAPIを表示して伝えるためにユースケースを書くことをお勧めします。このようなユースケースは回帰テストの基礎を形成します。

AVA

AVA logo

ES2015をサポートする未来的なテストランナー。 JavaScriptがシングルスレッドであっても、Node.jsのIOはその非同期性のために並行して発生する可能性があります。 AVAはこれを利用してテストを同時に実行します。これはIO重いテストに特に役立ちます。さらに、テストファイルは別々のプロセスとして並行して実行されるため、各テストファイルのパフォーマンスと分離環境がさらに向上します。

  • 最小限で速い
  • 簡単なテスト構文
  • 同時にテストを実行する
  • アトミックテストを書くことを強制する
  • 暗黙のグローバルはありません
  • 各テストファイルのための隔離された環境
  • ES2015でテストを書く
  • 約束のサポート
  • 発電機機能のサポート
  • 非同期機能のサポート
  • 観察可能なサポート
  • 強化されたアサーション
  • オプションのTAP出力
  • クリーンなスタックトレース

Buster.js

Node.jsで構築されたJavaScriptテストランナー。非常にモジュラーで柔軟性があります。それ自身のアサーションライブラリが付属していますが、あなたが好きならあなたはあなた自身のものを追加することができます。 アサーションライブラリ は分離されているので、他のテストランナーでも使用できます。 assert(!...)expect(...).not...を使う代わりに、Nice twist imhoであるrefute(...)を使います。

ブラウザのJavaScriptテストツールキット。ブラウザ自動化によるブラウザテスト(JsTestDriverと思う)、QUnitスタイルの静的HTMLページテスト、ヘッドレスブラウザ(PhantomJS、jsdomなど)でのテストなどを行います。 概要 を見てください。

Node.jsテストツールキット同じテストケースライブラリ、アサーションライブラリなどが得られます。これは、ハイブリッドブラウザやNode.jsコードにも適しています。テストケースをBuster.JSで書き、Node.jsと実際のブラウザの両方で実行します。

スクリーンキャスト: Buster.jsはじめに (2:45)

長所

  • Node.jsを使用するので、Win/OS X/Linuxと互換性があります。
  • ブラウザから、あるいはPhantomJSを使ってヘッドレスでテストを実行する
  • 一度に複数のクライアントで実行する
  • NodeJSテストをサポート
  • 開発用コンピュータでサーバー/クライアントを実行する必要はありません(IEは不要)
  • コマンドラインからテストを実行する(ant/mavenに統合可能)
  • テストxUnitまたはBDDスタイルを書く
  • 複数のJavaScriptテストフレームワークをサポート
  • コメントアウトする代わりにテストを延期する
  • SinonJSビルトイン
  • 保存時にテストを自動実行
  • ドメイン間のプロキシリクエスト
  • カスタマイズ可能:
    • 他のテストフレームワークをラップするように拡張する(JsTestDriverが組み込まれています)
    • あなた自身の主張/反論
    • レポーター(xUnit XML、伝統的なドット、仕様、タップ、TeamCityなど)
    • ブラウザテストを実行するために使用されるHTMLをカスタマイズ/置換する
  • TextMateとEmacsの統合

短所

  • まだベータ版ではバグがある可能性があります
  • Eclipse/IntelliJ用のプラグインはまだありません
  • TestSwarm *のようにos/browser/versionで結果をグループ化しません。ただし、テスト結果にはブラウザの名前とバージョンが表示されます。
  • TestSwarm *のような過去のテスト結果の履歴はありません。
  • Windowsでは完全には動作しません 2014年5月現在

* TestSwarmはContinuous Integrationサーバーでもありますが、Buster.jsには別のCIサーバーが必要です。ただし、xUnitのXMLレポートは出力されるため、 HudsonBamboo 、または他のCIサーバーと統合するのは簡単なはずです。

TestSwarm

https://github.com/jquery/testswarm

GitHubのWebページに記載されているように、TestSwarmは正式に開発中ではありません。彼らはKarma、browserstack-runner、またはInternを推薦します。

ジャスミン

Jasmine

これは振る舞い主導のフレームワークであり(以下の引用で述べる)、RubyやRuby on Railsに精通している開発者にとっては興味深いかもしれません。構文はRailsプロジェクトでのテストに使用される RSpec に基づいています。

Jasmineの仕様は、(qUnit形式で)HTMLページから、または(Karmaとして)テストランナーから実行できます。

JasmineはあなたのJavaScriptコードをテストするための振る舞い駆動開発フレームワークです。他のJavaScriptフレームワークには依存しません。 DOMは必要ありません。

このテストフレームワークの経験がある場合は、さらに情報を投稿してください:)

プロジェクトホーム: http://jasmine.github.io/

QUnit

QUnitは、ブラウザでJavaScriptをテストすることに重点を置きながら、開発者にできるだけ便利な機能を提供します。サイトからの流れ:

QUnitは、強力で使いやすいJavaScript単体テストスイートです。 jQuery、jQuery UI、およびjQuery Mobileプロジェクトで使用され、一般的なJavaScriptコードをテストすることができます。

QUnitはTestSwarm(上記)といくつかの歴史を共有しています。

QUnitはもともとjQueryの一部としてJohn Resigによって開発されました。 2008年には、独自のホーム、名前、およびAPIドキュメントを入手し、他のユーザーが自分のユニットテストにも使用できるようにしました。当時はまだjQueryに依存していました。 2009年の書き直しで、QUnitは完全にスタンドアロンで動作するようになりました。 QUnitのアサーションメソッドは、ある程度はQUnitの影響を受けていたCommonJS単体テスト仕様に従います。

プロジェクトホーム: http://qunitjs.com/

Sinon

もう1つの優れたツールは、 テスト駆動型JavaScript開発 の作者であるChristian Johansenによる sinon.js です。自分で最もよく説明されている:

JavaScript用のスタンドアロンのテストスパイ、スタブ、およびモック。どの単体テストフレームワークでも依存関係は機能しません。

インターン

Intern Webサイト はこのリストの他のテストフレームワークとの直接的な機能比較を提供します。他のJavaScriptベースのテストシステムよりもすぐに使える機能が追加されています。

JEST

新しいがまだ非常に強力なテストフレームワーク。スナップショットベースのテストも可能になり、これによりテストのスピードが上がり、テストの観点から新しい力学が生まれます。

彼らの話の1つをチェックしてください: https://www.youtube.com/watch?v=cAKYQpTC7MA

さらに良いことに: はじめに

1489
gregers

Dojo Object Harness(DOH)単体テスト・フレームワーク を見てください。これは、JavaScript単体テストのためのフレームワークに依存しないハーネスであり、Dojoの依存関係はありません。それについての非常に良い説明が Dojo Objective Harnessを使ったWeb 2.0アプリケーションの単体テスト にあります。

もしあなたがUIテストを自動化したいのであれば(多くの開発者の苦痛な点です) - doh.robot (一時的に更新します。他のリンク http://dojotoolkit.org/) reference-guide/util/dohrobot.htmlおよび dijit.robotx (一時停止中) 後者は受け入れテストのために設計されています。更新:

参照されている記事はそれらを使う方法、マウスやキーボードを使ってあなたのUIと対話するユーザーをエミュレートする方法、そしてテストセッションを記録する方法を説明します。

63
Eugene Lazutkin

Chutzpah - JavaScriptテストランナー

私はChutzpahというオープンソースプロジェクトを作成しました。これはJavaScriptの単体テストのテストランナーです。 Chutzpahを使用すると、コマンドラインとVisual Studioの内部からJavaScriptの単体テストを実行できます。 TeamCity継続的インテグレーションサーバーでの実行もサポートしています。

34
Matthew Manela

ウィキペディアのエントリーのJavaScriptセクション、 ユニットテストフレームワークのリスト は、利用可能な選択肢のリストを提供します。クライアント側、サーバー側、またはその両方で機能しているかどうかを示します。

26
Pete TerMaat

バスターJS

テスト駆動型Javascript開発およびSinonフレームワークの作者であるChristian Johansenによる BusterJS もあります。サイトから:

Buster.JSは新しいJavaScriptテストフレームワークです。それはNode.jsテストと同様に実際のブラウザ(JsTestDriverと思う)でテストランを自動化することによってブラウザテストをします。

14
Tauren

google-js-test:

GoogleがリリースしたJavaScriptテストフレームワーク: https://github.com/google/gjstest

  • ブラウザを実行することなく、非常に速いテストの起動と実行時間。
  • 合格テストと不合格テストの両方の場合に、きれいで読みやすい出力。
  • ブラウザベースのテストランナー JSが変更されるたびに簡単に更新できます。
  • Google Test C++に似たスタイルとセマンティクス。
  • Google C++ Mocking Framework に基づくスタイルとセマンティクスを持つ最小限の定型コード(たとえば$tearDown$verifyAll)を必要とする組み込みのモックフレームワーク.

現在Windows用のバイナリはありません

10
kolen

私たちは今PavlovとJSTestDriverと一緒にQunitを使っています。このアプローチは私達にとってはうまくいきます。

QUnit

パブロフ情報源

jsTestDriversource

8
Tom Stickel

あなたはプロとして「実際のブラウザで走る」ことを持っています、しかし私の経験ではそれが遅いので詐欺です。しかし、それを価値あるものにしているのは、ブラウザ以外の選択肢からの十分なJSエミュレーションの欠如です。あなたのJSがブラウザ内テストだけで十分であるほど十分に複雑であるなら、それは考えられるかもしれませんが、考慮すべきより多くの選択肢があります:

HtmlUnit : "それはかなり良いJavaScriptサポート(絶えず改良されています)を持ち、あなたが望む設定に応じてFirefoxかInternet Explorerのどちらかをシミュレートして、かなり複雑なAJAXライブラリでさえ動作することができますつかいます。"そのエミュレーションがあなたの使用に十分に適しているなら、それはブラウザを運転するよりはるかに速いでしょう。

しかしHtmlUnitは十分なJSサポートを持っているかもしれませんが、あなたはJavaが好きではありませんか?それから多分:

Celerity :HtmlUnitに支援されたJRuby上で動作するWatir API。

または同様に

Schnell :HtmlUnitの別のJRubyラッパー。

もちろん、HtmlUnitが十分ではなく、ブラウザを駆動する必要がある場合は、 WatirでJSを駆動することを検討してください

6

YUIには テストフレームワーク があります。 このビデオ Yahoo!からTDDについての基本はたくさんありますが、Theatreはいい紹介です。

このフレームワークは一般的なものであり、任意のJavaScriptまたはJSライブラリに対して実行できます。

6
Matthew Taylor

私達はJavascriptコードジェネレータST-JS( http://st-js.org )への私達のJavaへのJUnit統合を追加しました。フレームワークは、テストされたコードと単体テストの両方に対して対応するJavascriptを生成し、そのコードをさまざまなブラウザに送信します。

単体テストランナーが必要なhttpポートを開く(そしてテストが終了したらそれを閉じる)ので、別のサーバーは必要ありません。失敗したアサーションがJUnit Eclipseプラグインによって正しく表示されるように、フレームワークはJavaスタックトレースを操作します。これがjQueryとMockjaxの簡単な例です。

@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id='fortune'></div>")

@Scripts({ "classpath://jquery.js",
       "classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
  @Test
  public void myTest() {
    $.ajaxSetup($map("async", false));
    $.mockjax(new MockjaxOptions() {
      {
        url = "/restful/fortune";
        responseText = new Fortune() {
          {
            status = "success";
            fortune = "Are you a turtle?";
          }
        };
      }
    });

    $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
      @Override
      public void $invoke(Fortune response, String p2, JQueryXHR p3) {
        if (response.status.equals("success")) {
          $("#fortune").html("Your fortune is: " + response.fortune);
        } else {
          $("#fortune").html("Things do not look good, no fortune was told");
        }

      }
    });
    assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
  }

  private static class Fortune {
    public String status;
    public String fortune;
  }
}
3
alex.c

qooxdoo の一部である単体テストフレームワーク、Dojo、ExtJSなどに似たオープンソースのRIAフレームワークにも興味があるかもしれませんが、かなり包括的なツールチェーンがあります。

testrunner のオンライン版を試してください。ヒント:左上の灰色の矢印をクリックします(もっとはっきりさせる必要があります)。選択したテストを実行する「再生」ボタンです。

単体テストを定義するためのJSクラスの詳細については、オンラインの APIビューア を参照してください。

自動化されたUIテスト(Selenium RCベース)については、 Simulator プロジェクトを調べてください。

3
Andreas Ecker

env.js を見てください。 env.jsでユニットテストを書く方法の例については 私のブログ を参照してください。

3
Aaron Digulla

MochiKit には、SimpleTestというテストフレームワークがあります。これは、元の作者からの ブログ投稿です

2
Fredrik