Como efetuar teste de Angular.js Filters usando Jasmine

image_pdfimage_print

Abaixo apresentamos uma demonstração de código que pode servir como base para testes de serviços do tipo Filter do Angular.js utilizando Jasmine.

//--- Código do Filtro --------------------------
var myApp = angular.module('myApp', []);

/**
 * Filtro utilizado para converter notações específicas em Boolean.
 * Se o valor de entrada for 'f' / 0 / '0' / 'false' / 'no'/ 'n' ou um array vazioserá retornado false, todos os demais valores retornarão true.
 */
myApp.filter('bool', function () {
	return function (value) {
        if (value && value.length !== 0) {
            var v = angular.lowercase('' + value);
            value = !(v === 'f' || v === '0' || v === 'false' || v === 'no' || v === 'n' || v === '[]');
        } else {
            value = false;
        }
        return value;
	};
});

// ---SPECS-------------------------

describe('myApp', function () {
    beforeEach(function () {
        module('myApp');
    });
    it('Bool filter foi carregado corretamente?', inject(function($filter) {
        expect($filter('bool')).not.toBeNull();
    }));
    it("Deverá retornar true se a entrada de dados é diferente de 'f' / 0 / '0' / 'false' / 'no'/ 'n'  ou um array vazio", inject(function (boolFilter) {
        expect(boolFilter(true)).toBeTruthy();
        expect(boolFilter('any string')).toBeTruthy();
        expect(boolFilter(1)).toBeTruthy();
        expect(boolFilter([1234])).toBeTruthy();
        expect(boolFilter({})).toBeTruthy();
    }));

    it("Deverá retornar false se o valor de entrada é igual a um dos seguintes valores 'f' / 0 / '0' / 'false' / 'no'/ 'n' e array vazio ", inject(function (boolFilter) {
        expect(boolFilter(false)).toBeFalsy();
        expect(boolFilter('false')).toBeFalsy();
        expect(boolFilter('f')).toBeFalsy();
        expect(boolFilter(0)).toBeFalsy();
        expect(boolFilter('n')).toBeFalsy();
        expect(boolFilter([])).toBeFalsy();
    }));
});

// --- Executor -------------------------
(function () {
    var jasmineEnv = jasmine.getEnv();
    jasmineEnv.updateInterval = 1000;

    var htmlReporter = new jasmine.HtmlReporter();

    jasmineEnv.addReporter(htmlReporter);

    jasmineEnv.specFilter = function (spec) {
        return htmlReporter.specFilter(spec);
    };

    var currentWindowOnload = window.onload;

    window.onload = function () {
        if (currentWindowOnload) {
            currentWindowOnload();
        }
        execJasmine();
    };

    function execJasmine() {
        jasmineEnv.execute();
    }

})();
Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!