Como escrever novas funções de asserção para o QUnit sem usar QUnit.push?

9

Eu quero escrever uma função assert personalizada para o QUnit para verificar se uma string real corresponde a uma regex esperada . Com a ajuda de esta pergunta , escrevi uma primeira versão básica que funciona como esperado:

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

Esta saída:

  

Mensagem: esperada: "correspondência de sequência / sem sentido /", real: "flor"

Ótimo!

No entanto, enquanto escrevia isso, verifiquei os os QUnit.extend docs e the QUnit.push docs . No entanto, este último menciona que:

  

Esse método é reprovado e é recomendado usá-lo por meio de sua referência direta no contexto de asserção.

Mas não consigo ver como posso aplicar este conselho dentro do contexto QUnit.extend .

Como escrevo corretamente uma asserção personalizada que não usa a função QUnit.push preterida?

    
por Jeroen 22.10.2015 в 11:37
fonte

1 resposta

2

Como sugerido por @sirrocco em um comentário, há um documento diferente push que você deve usar para isto: veja este link de documentação . Isso significa que sua resposta é tão simples quanto alterar uma linha de código para usar this.push em vez de Qunit.push :

this.push(success, actual, expected, message);

Veja um exemplo completo de trabalho:

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><linkhref="https://code.jquery.com/qunit/qunit-1.20.0.css" rel="stylesheet"/>
<div id="qunit"></div>
    
por Jeroen 30.10.2015 / 16:41
fonte