如何在不使用QUnit.push的情况下为QUnit编写新的断言函数?

时间:2015-10-22 09:37:44

标签: javascript qunit

我想为QUnit编写一个自定义assert函数,以检查实际字符串是否与期望的正则表达式匹配。在this question的帮助下,我编写了第一个按预期工作的基本版本:

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");
});

输出:

  

消息:预期:"字符串匹配/乱码/",实际:"花"

大!

但是,在写这篇文章时,我检查了the QUnit.extend docsthe QUnit.push docs。然而,后者提到:

  

此方法已弃用,建议在断言上下文中通过其直接引用使用它。

但我没有看到如何在QUnit.extend上下文中应用此建议。

如何正确编写不使用已弃用的QUnit.push函数的自定义断言?

1 个答案:

答案 0 :(得分:2)

正如@sirrocco在评论中所建议的那样,您应该使用不同的 push方法文档:请参阅this documentation link。这意味着您的答案就像更改一行代码以使用this.push而不是Qunit.push一样简单:

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>
&#13;
&#13;
&#13;