[DÚVIDA] Qual a real utilidade de testes unitários mockados?
Tenho assistido o curso do Manguinho sobre clean architecture, e me surgiu uma dúvida no seguinte contexto:
Temos o seguinte adapter:
import { type EmailValidator } from '../protocols/email-validator'
import validator from 'validator'
export class EmailValidatorAdapter implements EmailValidator {
isValid (email: string): boolean {
return validator.isEmail(email)
}
}
e os seguintes testes:
import { EmailValidatorAdapter } from './email-validator'
import validator from 'validator'
jest.mock('validator', () => ({
isEmail (): boolean {
return true
}
}))
describe('Email Validator Adapter', () => {
test('Should return false if validator returns false', () => {
const sut = new EmailValidatorAdapter()
jest.spyOn(validator, 'isEmail').mockReturnValueOnce(false)
const isValid = sut.isValid('[email protected]')
expect(isValid).toBe(false)
})
test('Should return true if validator returns true', () => {
const sut = new EmailValidatorAdapter()
const isValid = sut.isValid('[email protected]')
expect(isValid).toBe(true)
})
})
No curso ele diz que a única coisa que interessa no teste é o retorno, e é por isso que ele mocka o primeiro teste Should return false if validator returns false
. Porém se vermos o email passado por parametro, esse é um email válido, tem toda a estrutura comum de um email, e o validator retorna true.
Tendo em vista isso, e se eu quiser mockar "ao contrário"? Adicionar um email de formato inválido no parametro e quiser mockar o retorno como true? Pq de fato não utilizamos o método isEmail
do validator nos testes?
A um tempo atrás eu já vi discussões em torno da utilidade desses testes, mas no contexto de estudos que eu estava passando não dei muita atenção. Gostaria da ajuda dos senhores para entender melhor a real utilidade de um teste mockado dessa forma. Obrigado 😊