12

我刚刚找到qHint,一种将 jsHint 测试集成到 Qunit 中的方法......但它在本地(我不是指本地主机)中不起作用,除非在 Firefox 中。

所以我想添加一个“警告”或“通知”,而不是测试失败,表明测试被跳过:

// do unit test if not local or local and running Firefox
t = QUnit.isLocal;
if (!t || (t && /Firefox/.test(navigator.userAgent))) {
    jsHintTest('JSHint core check', 'js/myplugin.js');
} else {
    test('JSHint core check (skipped)', function(){
        ok( true, 'check not done locally' );
    });
}

我只是想让测试被跳过的情况更加明显,这可能吗?


更新:感谢 Odi 的回答!但我必须稍作修改才能使代码在 QUnit v1.11.0pre 中工作:

QUnit.testSkip = function( testName, callback ) {
    QUnit.test(testName + ' (SKIPPED)', function() {
        if (typeof callback === "function") {
            callback();
        }
        var li = document.getElementById(QUnit.config.current.id);
        QUnit.done(function() {
            li.style.background = '#FFFF99';
        });
    });
};
testSkip = QUnit.testSkip;
4

2 回答 2

17

我有同样的要求,我只是定义了一种test()我称之为testSkip().

此测试方法只是替换您的测试函数并将名称更改为<test name> (SKIPPED). 之后,QUnit 认为测试通过了。

为了进一步表明这是一个跳过的测试,我QUnit.done为每个跳过的测试添加了一个回调函数,以将 HTML 输出中的测试颜色更改为黄色。这些回调在测试套件完成时执行。直接设置该值不起作用,因为 QUnit 在运行结束时应用了通过/失败测试的样式。

QUnit.testSkip = function() {
   QUnit.test(arguments[0] + ' (SKIPPED)', function() {
       QUnit.expect(0);//dont expect any tests
       var li = document.getElementById(QUnit.config.current.id);
       QUnit.done(function() {
           li.style.background = '#FFFF99';
       });
   });
};
testSkip = QUnit.testSkip;

然后,您可以使用testSkip()而不是test()跳过的测试。

对于我的测试套件,结果如下所示: QUnit 中跳过的测试

于 2012-12-06T19:47:37.277 回答
2

对于任何可能对评论感到茫然的人来说,Mottie 对这个问题的评论指出Qunit 现在有一个skip()功能。只需将任何调用替换test()skip()跳过该测试即可。

于 2016-05-18T18:12:13.603 回答