Testes unitários com jasmine: Criando seu próprio Matcher

O jasmine possui algumas funções prontas que realizam testes simples, que são chamados de matchers. Sendo assim, o desenvolvedor pode escrever testes de maneira simples e legível. No entando é possível escrever seu próprio matcher, no qual ele verificará no resultado do teste o que o desenvolvedor definiu para ele. Para criar esse matcher, utilizaremos o ambiente de desenvolvimento configurado no artigo Testes Unitários com Jasmine e Karma.

Criando Seu Próprio Matcher

Para criar um matcher, pode-se adicionar o código antes de cada spec. No entando isso seria inviável devido a quantidade de código repetido, então usaremos o beforeEach(). Este último executará o seu conteúdo antes de cada spec. Adicione o código abaixo no começo do arquivo ou logo abaixo do describe [jas 2018].

    
var meusMatchers = {
toBe2018: function (util, customEqualityTesters) {
           return {
              compare: function (actual, expected) {
                var result = {};
                result.pass = util.equals(actual, 
                2018, customEqualityTesters);

                if (!result.pass) {
                    result.message = "Expected " + actual + " 
                    to be 2018 but it was not";
                }
                return result;
             }
          }
      }
 };
    

Dentro do objeto "meusMatchers" criamos um Matcher com o nome "toBe2018". Esse Matcher nos ajudará a verificar se um valor é igual a 2018. Quando se cria um Matcher, ele deve receber dois parâmetros, util e customEqualityTesters. O primeiro possui funcionalidades para os Matchers e o segundo precisa ser passado como parâmetro porque utilizamos o utils.equals. A função do Matcher deve retornar a função compare(), que recebe o valor atual e o esperado.

Se o valor passado para verificação não for 2018, então nosso Matcher deverá retornar uma mensagem de erro. Para que essa mensagem seja exibida pelo jasmine no console, devemos adicionar o atributo message com a mensagem definida na função compare().

Para registrar esse Matcher e podermos utilizá-lo em nossos testes, será necessário iniciá-lo antes de cada spec. Para isso, registraremos dentro da função beforeEach(), conforme o código abaixo:

    
beforeEach(function () {
        jasmine.addMatchers(meusMatchers);
    

Após registrarmos o nosso matcher, já poderemos utilizá-lo em nossos testes. Abaixo temos um código de exemplo:

    
it('Deve ser igual a 2018', function () {
        expect(2018).toBe2018();
    

Criando Seu Próprio Matcher

Vimos que é possível utilizar essa funcionalidade do jasmine para criarmos Matchers que atendam as regras específicas do nosso código. Sinta-se a vontade para explorar essa funcionalidade.

Referências