"Minha família inteira é da área médica. Um jantar de fim de semana em casa parece mais um daqueles episódios de seriados médicos da televisão: pessoas discutindo casos e como resolvê-los. Apesar de entender praticamente nada sobre medicina, uma coisa me chama muito a atenção: o fanatismo deles por qualidade. Um médico, ao longo de uma cirurgia, nunca abre mão de qualidade. Se o paciente falar para ele: “Doutor, o senhor poderia não lavar a mão e terminar a cirurgia 15 minutos mais cedo?”, tenho certeza que o médico negaria na hora. Ele saberia que chegaria ao resultado final mais rápido, mas a chance de um problema é tão grande, que simplesmente não valeria a pena." Mauricio Aniche (Author) sobre TDD.
Acho que esse gato programa melhor do que nós sem TDD
Olá a todos, enquanto gravava o curso, percebi que precisava revisar, ou mesmo estudar, algumas funcionalidades do Jest. Aproveitei para criar essa seção adicional! 😘 De forma alguma pretendo se exaustivo! Espero que isso ajude pessoas que além do Mongoose, também estejam entrando no mundo do TDD, testes de unidades com Jest.
Sugestão de leitura: Fernando Doglio. REST API Development with Node.js: Manage and Understand the Full Capabilities of Successful REST Development.
Vamos começar criando nosso aquivo package.json.
Esse comando vai criar um package.json com as configurações padrões.
Um problema que demorei a entender o porquê no início foi a necessidade de package.json, sem ele, dá erros, e os erros não são informativos o suficiente para entender, nem mesmo para jogar no Google.
Você vai precisar, caso ainda não tenha instalado, o Jest, instalado como Dev
Testando um função que soma
Para testar:
Resultado do teste da função que soma
Testando o que NÃO é:
Estou apresentado, para efeito de estudo, alguns casos. Não vamos usar todos os esses, ou mesmo podemos usar casos diferentes. 😎 Não deixe de consultar a documentação oficial caso esteja adaptando esses exemplos para o seu caso.
Testando para valores "falsy"
Testando objetos
Estamos usando toEqual no lugar de toBe. Algumas pista por que???
//functions.js
const functions = {
add: (a, b) => a + b
}
//functions.test.js
const functions = require("./functions");
test("Vamos testar uma função que soma", () => {
expect(functions.add(2, 2)).toBe(4);
})
test("Vamos testar uma função que soma: o que não é", () => {
expect(functions.add(2, 2)).not.toBe(5);
})
// toBeNull
test('Deve ser null', () => {
expect(functions.isNull()).toBeNull();
});
// toBeFalsy
test('Deve ser falsy', () => {
expect(functions.verificador(null)).toBeFalsy();
});
// toEqual
test('Usuário retornado deve ser Jorge Pires em forma de JSON', () => {
expect(functions.CriarUsuario()).toEqual({
firstName: 'Jorge',
lastName: 'Pires'
});
});
// Menor do que
test('Deve ser menor do que', () => {
const load1 = 800;
const load2 = 800;
expect(load1 + load2).toBeLessThanOrEqual(1600);
});
// Regex, pode ser útil para testar id do mongoose caso modifique o id
test('Não existe s em Jorge', () => {
expect('Jorge').not.toMatch(/I/s);
});