如何在不使用 QUnit.push 的情况下为 QUnit 编写新的断言函数?
How to write new assertion functions for QUnit without using QUnit.push?
我想为 QUnit 编写自定义 assert
函数来检查 actual 字符串是否与 expected 正则表达式匹配。在 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");
});
这输出:
Message: Expected: "string matching /gibberish/", Actual: "flower"
太棒了!
然而,在撰写本文时,我检查了两个 the QUnit.extend
docs and the QUnit.push docs。但是,后者提到:
This method is deprecated and it's recommended to use it through its direct reference in the assertion context.
但我看不出如何在 QUnit.extend
上下文中应用此建议。
如何正确编写不使用已弃用的 QUnit.push
函数的自定义断言?
正如@sirrocco 在评论中所建议的,有一个 different 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>
我想为 QUnit 编写自定义 assert
函数来检查 actual 字符串是否与 expected 正则表达式匹配。在 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");
});
这输出:
Message: Expected: "string matching /gibberish/", Actual: "flower"
太棒了!
然而,在撰写本文时,我检查了两个 the QUnit.extend
docs and the QUnit.push docs。但是,后者提到:
This method is deprecated and it's recommended to use it through its direct reference in the assertion context.
但我看不出如何在 QUnit.extend
上下文中应用此建议。
如何正确编写不使用已弃用的 QUnit.push
函数的自定义断言?
正如@sirrocco 在评论中所建议的,有一个 different 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>