Javascript 如何在QUnit中测试自定义断言

Javascript 如何在QUnit中测试自定义断言,javascript,qunit,Javascript,Qunit,我想测试我为QUnit编写的自定义断言。从表面上看,它说可以,但它只显示了如何测试断言是否通过。它似乎没有测试断言应该失败的条件。是否有任何方法可以捕获失败,并使其结果通过测试 假设我想测试: 可以这样使用上述断言: QUnit.test( "mod2", function( assert ) { assert.mod2( 2, 0, "2 % 2 == 0" ); assert.mod2( 3, 1, "3 % 2 == 1" ); }); 因此,我想编写一个测试来断言mod

我想测试我为QUnit编写的自定义断言。从表面上看,它说可以,但它只显示了如何测试断言是否通过。它似乎没有测试断言应该失败的条件。是否有任何方法可以捕获失败,并使其结果通过测试

假设我想测试:

可以这样使用上述断言:

QUnit.test( "mod2", function( assert ) {
    assert.mod2( 2, 0, "2 % 2 == 0" );
    assert.mod2( 3, 1, "3 % 2 == 1" );
});
因此,我想编写一个测试来断言mod2测试按预期工作

具有以下各项测试
.ok()
断言是否在预期的情况下通过:

QUnit.test( "ok", function( assert ) {
    assert.ok( true );
    assert.ok( 1 );
    assert.ok( "1" );
    assert.ok( Infinity );
    assert.ok( {} );
    assert.ok( [] );
} );
但是,当断言成功失败时,我该如何测试呢?测试可能如下所示:

QUnit.test( "test assert.mod2", function( assert ) {
    assert.mod2( 2, 0, "2 % 2 == 0" );
    assert.fails (assert.mod2( 2, 1, "2 % 2 == 0" ));
    assert.mod2( 3, 1, "3 % 2 == 1" );
    assert.fails (assert.mod2( 3, 0, "3 % 2 == 1" ));
});

我编写了
.fails()
,以演示测试可能是什么样子。

可以这样做,如下所示:

QUnit.test( "test assert.mod2", function( assert ) {
    assert.mod2( 2, 0, "2 % 2 == 0" );
    assert.fails (assert.mod2( 2, 1, "2 % 2 == 0" ));
    assert.mod2( 3, 1, "3 % 2 == 1" );
    assert.fails (assert.mod2( 3, 0, "3 % 2 == 1" ));
});
QUnit.module( "failing assertions", {
    beforeEach: function( assert ) {
        var originalPushResult = assert.pushResult;
        assert.pushResult = function( resultInfo ) {

            // Inverts the result so we can test failing assertions
            resultInfo.result = !resultInfo.result;
            originalPushResult( resultInfo );
        };
    }
} );

QUnit.test( "ok", function( assert ) {
    assert.ok( false );
    assert.ok( 0 );
    assert.ok( "" );
    assert.ok( null );
    assert.ok( undefined );
    assert.ok( NaN );
} );