2016-08-21 4 views
1

Ich möchte benutzerdefinierte Zusicherungen, die ich für QUnit geschrieben habe, testen. Auf dem QUnit home page heißt es, es kann test its own assertions, aber es zeigt nur, wie diese Behauptungen bestanden werden. Dh es scheint keine Bedingungen zu testen, bei denen eine Assertion fehlschlagen sollte. Gibt es eine Möglichkeit, einen Fehler zu erfassen und zu einem bestandenen Test zu führen?So testen Sie benutzerdefinierte Zusicherungen in QUnit

Sagen wir, ich this custom assertion testen wollte:

QUnit.assert.mod2 = function(value, expected, message) { 
    var actual = value % 2; 
    this.pushResult({ 
     result: actual === expected, 
     actual: actual, 
     expected: expected, 
     message: message 
    }); 
}; 

Die obige Behauptung könnte verwendet werden, etwa so:

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

Deshalb möchte ich würde einen Test schreiben, zu behaupten, dass die mod2 Test funktioniert wie erwartet.

Die tests for QUnit assertions haben die folgenden, die prüft, ob die .ok() Behauptung geht, wenn zu erwarten:

QUnit.test("ok", function(assert) { 
    assert.ok(true); 
    assert.ok(1); 
    assert.ok("1"); 
    assert.ok(Infinity); 
    assert.ok({}); 
    assert.ok([]); 
}); 

Aber wie könnte ich testen, wenn die Behauptung erfolgreich ausfällt? Der Test könnte wie folgt aussehen:

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

Ich habe .fails() gemacht zu zeigen, was der Test aussehen könnte.

Antwort

1

Es kann wie so getan werden, als je die source code:

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