nantekkotai's blog

おもに技術とお仕事に関連することを書いています。

QUnit.equiv ってのは要するに QUnit.same のことです

jQueryが不要となったスタンドアローンなQUnit最新版をgithubから落としてくるとサンプルも付いてくる。この中に test/same.js というファイルがあり、以下のメソッドが大量に出てくる。

equals(QUnit.equiv(null, null), true, "null");

equalsはドキュメントにも書いてあるからわかる。
http://docs.jquery.com/QUnit/equals#actualexpectedmessage

じゃあQUnit.equivって?これはドキュメントに書いてない。下の方にQUnit.xxxなメソッドが色々と載っているがやはりここにも書いてない。結局コード読む。で、いろいろわかる。

QUnit.equiv は二つの要素が一致しているか判定する

test/same.js の例だと

QUnit.equiv(null, null); // => true
QUnit.equiv(null, []);     // => false

同じであればtrueを返す。ついでに、オブジェクトも配列もきっちりチェックしてくれる。つまりこれは、機能としては全く持って QUnit.same()と同じな訳です。
一体どうなってんのかと、コードをを追っていくとやはりあった。

// 292行目
deepEqual: function(a, b, message) {
    push(QUnit.equiv(a, b), a, b, message);
},
....

// 383行目
QUnit.same = QUnit.deepEqual;

same = deepEqual ≒ equiv
みたいなものでしょうか。pushの先には結局ok()が待ち受けているだけなので、やはりチェックするということに関して云えば大して変わりないでしょう。なんであまり驚くようなメソッドではなかったということですね。

おまけ

中を読み進めると、jQueryから分離されたと云われながら未だにjQueryソースコードが残っていたりします。例えば以下。

// 336行目
/**
 * Resets the test setup. Useful for tests that modify the DOM.
 */
reset: function() {
    if ( window.jQuery ) {
        jQuery("#main").html( config.fixture );
        jQuery.event.global = {};
        jQuery.ajaxSettings = extend({}, config.ajaxSettings);
    }
},

まあ、あまり使わなさそうなものですが。

それにしてもQUnitは設計もコードも美しい。読んで気分が良いです。すてきですね。