Testes com o Módulo Assert em Node.js
No tema anterior, para verificar o resultado de um teste, o valor obtido foi comparado com o resultado esperado:
if (result !== expectedResult) {
throw new Error(`Expected ${expectedResult}, but got ${result}`);
}
Essa comparação é bastante trivial e, de fato, é usada em muitos testes com pequenas variações. Para simplificar a verificação de resultados em testes, o Node.js possui um módulo embutido chamado assert
. Além disso, existem várias bibliotecas conhecidas como "Assertions" que servem ao mesmo propósito, como should.js
, expect.js
, etc. No entanto, neste caso, vamos focar no uso do módulo assert
.
equal
A função assert.strictEqual()
compara dois valores e possui a seguinte sintaxe
assert.strictEqual(actual, expected[, message])
Os parâmetros actual
e expected
representam os valores a serem comparados. Se eles não forem iguais, um erro será lançado. Como parâmetro opcional, message
pode ser utilizado para passar uma mensagem de erro. Por exemplo, definimos o seguinte arquivo-módulo operations.js
:
module.exports.multiply = function (x, y) {
return x * y;
};
Aqui, definimos uma função simples de multiplicação de dois números. Vamos testá-la criando o arquivo operations.test.js
:
const assert = require("assert");
const operations = require("./operations");
it("should multiply two numbers", function () {
const expected = 15;
const result = operations.multiply(3, 5);
assert.strictEqual(result, expected);
});
Se ambos os valores forem iguais, ao rodar o teste veremos na console que os testes passaram. Caso os valores não sejam iguais, veremos marcadores vermelhos com mensagens de erro:
c:\app> npm test > testapp@1.0.0 test > mocha *.test.js ✔ should multiply two numbers 1 passing (5ms)
Certamente, a utilização da função assert.strictEqual
é mais simples do que comparar manualmente dois valores e lançar um erro com uma mensagem específica.
Ao contrário da função assert.strictEqual()
, a função assert.notStrictEqual()
lança um erro se ambos os valores forem iguais:
it("should multiply two numbers", function () {
const expected = 15;
const result = operations.multiply(3, 5);
assert.notStrictEqual(result, expected);
});
Neste caso, o teste passará somente se os valores não forem iguais.