Javascriptユニットテストフレーム比較Qunit VS Jasmine

8258 ワード

仕事をしたいなら、まずその器を使います.いいユニットのテストフレームはTDDの成功の半分です.Javascript優秀なテストフレームはたくさんあります.Jasmine、Qunit、JsTestDriver、JSUnit、Mochaなどが含まれています.もちろん、あなたも自分のユニットテストフレームを書いてもいいです.本文の主役はJasmineとQunitです.私は以前Qunitでユニットテストをしていましたが、Qunitは中国でのシェアが非常に高く、私も例外ではありませんでした.米国の同僚たちはすでにJasmineを使っています.より良い選択をするために、この二つの枠組みを比較することにしました.
まず作者の自分の枠に対する説明を見てください.
J〓Zaefferer(QUnit著者):QUnitはJavaScriptユニットテストフレームで、主にブラウザでユニットテストを実行します.このプロジェクトはjQueryに属していますが、jQueryに依存せず、ブラウザDOMにも依存しません.したがって、node.jsまたはRhinoでも使用できます.QUnitは勉強しやすいので、htmlページに2つのファイルを含めるだけで、インストールや構築は不要です.最短のテストセットは11行のhtmlファイルだけ必要です.
Davis Frank(Jasmine著者):JavaScriptテストフレームであり、BDDスタイルをJavaScriptテストに導入することを目的としています.違いはBD(標準のTDDより)を目指していますので、一般的なxUnitフレームよりも表現性が強く、より良いコードを開発者に協力します.また、私たちは依存を減らすために努力しています.このようにして、node.jsでJasmineを使ってもいいし、ブラウザやモバイルプログラムでも使えます.
1、JasmineとQunitレポートの比較
Qunitレポート
Jasmineレポート
レポートから見ると、非常に精緻で、結果は一目瞭然です.Jasmineはサブグループがあり、グループがはっきりしていますが、Qunitは現在のテストで複数の断言数を持つことができます.これは彼らのそれぞれの長所であり、これはそれぞれ長所がある.
2、JasmineとQunitの断言比較
Jamineさんは12種類の原生があります.比較を簡単に定義できます.これは大きな長所です.
Qunitは8種類の断言を持っています.もちろん自分で広げてもいいですが、比較的に面倒です.
断言はこれと比較して、Jasmineはやや優勢です.
3、JasmineとQunitのグループ(モジュール別)の比較
Jasmineはdescribe()でグループ化とモジュールを行うことができ、その利点はネストできること、すなわち分子ブロックがよくでき、非常に明瞭に使用される機能である.
Qunitはmodule()でグループ化して、分子木のブロックを区画することができません.
この手紙からJasmineはもう一回城を降ります.
4、JasmineとQunitのテスト比較
Jasmineはit()だけでテストを操作する方法です.
Qunitは3つのテスト用の方法を含んでいます.これが多いです.非同期テストの方法が多くなり、しかもexpect()は個数を制限することができます.
このQunitはやや豊富で、Jasmineに富む.
5、JasmineとQunitの非同期制御
まずJasmineの非同期制御方法を見てください.長くて面倒くさいです.自分で新しく包装する必要があります.
    //  player.openLibrary     
it('The music library should be opend', function() {
    var flag;
                                      
    runs(function() {
        flag = false;
        player.openLibrary(function() {
            flag = true;
        });
    });
    waitsFor(function() {
        return flag;
    }, "aaaaaaa", 500);
    runs(function() {
        expect(player.library.openLibrary).toEqual(true);
    });
});
Qunitのを見たら、分かりやすいです.
//  player.openLibrary     
asyncTest('The music library should be opend', function() {
    player.openLibrary(function() {
        start();
        ok(player.library != null, 'The "player.library" should be not null.');
        ok(player.library.openLibrary === true, 'The music library should be opened');
    });
});
//  
test('The music library should be opend', function() {
    stop();
    player.openLibrary(function() {
        start();
        ok(player.library != null, 'The "player.library" should be not null.');
        ok(player.library.openLibrary === true, 'The music library should be opened');
    });
});
非同期制御テストではQunitの方が分かりやすいです.
6、Mock ClockとSpies
これはJasmineならではのもので、とてもいいです.私もこの2つの機能が大好きです.Mock Clockは時間間隔を作ってくれます.(ここではコード実行時間を正確にテストできます.)Spiesは関数の呼び出し回数と呼び出しの仕方を知っています.これはJasmineの優れたところです.
7、市場占有率:Jasmine 51%、Qunit 31%は、昨年12月の統計データです.
8、統合と配置:これも非常に重要です.ここでQunitとJasmineはJenskinとVVS 2012に統合できます.RequireJsもテストできます.
9、データのロードとアンインストール:これもQunitとJasmineの両方で実現できる機能です.
これらの比較があったら、私はJasmineがもっと好きだと認めました.その後はJavascriptテストをJasmineに変えました.
Jasmine公式サイト:http://pivotal.github.io/jasmine/
Qunit公式サイト:http://qunitjs.com/
Javascriptテストフレームのまとめ:http://en.wikipedia.org/wiki/List_of_ユニットtesting_frame eworks菗JavaScript
 
前の比較表を添付します.
 
Jasmine
Qunit
Resoult
アスセット
expect(x).toEqual(y)copares ojecs or prmitives x and y and passes if they arequivalenteexpect(x).toBe(y)corererererereres oojecs or prmitives x andy andand passes passef they the the the same the same theeeeeeeeeeeeeeexxxxxtototottttttttttttttttttttttttttttttttttpapapapapapapatttttttttttttttttttttttt(x).toBe Defined()passes if x x is not undefined expect(x).toBendefined()passes if x isundefined expect(x).toBeNull()passes iix.toBeTruthy()passeif x x evaluatoeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeexxxxxxxpapapapapapapapapapapapapapapapapapapapapapactx(x.papapapapapapapapapapapapapapapapapapapapapass x.exxxxxxxx contains y expect(x).toBeLessThan(y)passes if x is less than y expect(x).toBeGreaterThan(y)passes if x is greaterthan y expect(function(){fn(}.toThrow(e)passes function fn throwption@exception e e e e when exted Weextcant.
deepEqual()A deep recursive commparisoaseration、working on prmitive types、arrays、objecs、reglar expressisisins、dates and functitititititititial()A non-ststict commparisoasastertion、rougggggggggggggggggggggggnerararation、rororororororougggggggggggggggggggggggggggggggggggggggnenerararararation、rororororororogggggggはい、arrays、object、reglar expressisions、dates and functins.notEqual()A non-strit commparisoaseration、checing for inequality.not StrictEqual()A non-stict coparisoaseration、checing forinequality.ok(A booteeeeeeeeequality.ok.ok.ok())A boboboververversasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasase.eeeininininininininininininininininininininininment is truthy.strictEqual()A strict type and value comprison asterion.throws()Asertion to test if a calback throws an exception when run.
Jasmine≒Qunit
Grouping
describe()It can be setting sub group.
module()Group related tests under a single label.
Jasmine>Qunit
Test
it()It with two parameters:a string and a function.
Qunit can display number of astertions in test async Test()Add an asyncrous test to run.The test must include a cal to start().expect()Specify how mastertions ares expected to run within test.Adda.
Jasmine≒Qunit
Aynchronous Control
runs()Blocks by themselves simply run as if they were caled directly.waits()The function works with runs()to provide a navieout before the next block block is waits For(Providing betters)
async Test()Add an asynchronous test to run.The test must include a call to start().start()Start running tests again after the testunner was stop.See stop()stop to()Stop the teunner.want.Stop.Stop.Stop.Stop.Stop.Stop.Stop.Stop.Stop.Stop to.Stop.Stop.Stop.Stop.Stop.Stop.Stop.
JasmineMock and Spies
Providing mock and spies are good functions for unit test.
\
Jasmine>Qunit
Market share
45%
31%
Jasmine>Qunit
Test Report
Jasmineレポート
Qunitレポート
Jasmine≒Qunit
Integrate VS
Y
Y
Jasmine≒Qunit
Integrate CI
Y
Y
Jasmine≒Qunit
Parameeterized tests
\
plugins qunit-parameterize
JasmineConfigration with RequireJs
Y
Y
Jasmine≒Qunit
Setup and Tendowown
Y
Y
Jasmine≒Qunit