2015-10-22 8 views
9

の実際の文字列が正規表現と一致するかどうかを確認するために、QUnitのカスタムassert関数を書きたいと思います。QUnit.pushを使わずにQUnitの新しいアサーション関数を書くには?

QUnit.extend(QUnit.assert, { 
    matches: function (actual, regex, message) { 
     var success = !!regex && !!actual && (new RegExp(regex)).test(actual); 
     var expected = "String matching /" + regex.toString() + "/"; 
     QUnit.push(success, actual, expected, message); 
    } 
}); 

QUnit.test("New assertion smoke test", function (assert) { 
    // force a failure to see the new assert work properly: 
    assert.matches("flower", "gibberish"); 
}); 

この出力:

メッセージ:予想: "文字列マッチング/ちんぷんかんぷん/"、実際: "花"

this questionの助けを借りて、私は期待どおりに動作最初の基本的なバージョンを書きました

素晴らしい!

しかし、これを書いている間に私はthe QUnit.extend docsthe QUnit.push docsの両方をチェックしました。しかし、後者のことを言及し:この方法はある

を廃止され、アサーションコンテキストにおけるその直接的な参照を介してそれを使用することをお勧めします。

しかし、私はQUnit.extendコンテキスト内で、このアドバイスを適用することができますどのように見ることができません。

非推奨のQUnit.push機能を使用しないカスタムアサーションを正しく作成するにはどうすればよいですか。コメントに@sirroccoによって示唆されるように

+0

は、このされていません。 https://api.qunitjs.com/push/あなたが探しているものは?最下位に例があります – sirrocco

+0

@sirroccoはい、実際はそれに似ています。確かにそれを与える必要があります。そうであれば、私はおそらくQUnitのドキュメントへの修正を提案するべきであり、廃止予定の 'プッシュ'記事(自分の質問にリンクしている記事)が提案した新しい記事にリンクすればいいだろう。 – Jeroen

+0

@sirrocco私はあなたの提案を試しに周りにあった、それは動作します:ありがとう!あなたがしたい場合は、私の答えを複製することができます、私は自分自身を削除し、あなたに十分に値する賞金を授与されます。 – Jeroen

答えて

2

は、あなたがこのために使用されなければならない異なるpush方法の文書があります:this documentation linkを参照してください。これは、あなたの答えではなくQunit.pushthis.pushを使用するコードの1行を変更するのと同じくらい簡単であることを意味する:

this.push(success, actual, expected, message); 

ここでは完全な作業例です:

QUnit.extend(QUnit.assert, { 
 
    matches: function (actual, regex, message) { 
 
     var success = !!regex && !!actual && (new RegExp(regex)).test(actual); 
 
     var expected = "String matching /" + regex.toString() + "/"; 
 
     this.push(success, actual, expected, message); 
 
    } 
 
}); 
 

 
QUnit.test("New assertion smoke test", function (assert) { 
 
    // force a failure to see the new assert work properly: 
 
    assert.matches("flower", /.*our.*/, "Wanted regex to match!"); 
 
});
<script src="https://code.jquery.com/qunit/qunit-1.20.0.js"></script> 
 
<link href="https://code.jquery.com/qunit/qunit-1.20.0.css" rel="stylesheet"/> 
 
<div id="qunit"></div>