Jasmine
Documentação Oficial: https://jasmine.github.io/index.html
Jasmine é um framework de testes behavior-driven (BDD) para JavaScript. Ele permite escrever testes automatizados de forma descritiva e legível, sem necessidade de navegador ou outras bibliotecas externas. Jasmine é amplamente utilizado para validar o comportamento de aplicações web, incluindo código síncrono e assíncrono.
Diferença entre teste síncrono e assíncrono
-
Testes síncronos verificam o comportamento de funções que executam e retornam resultados imediatamente. O teste é executado de forma sequencial, linha por linha.
-
Testes assíncronos são usados quando o resultado depende de operações que levam tempo, como requisições HTTP,
setTimeout
, leitura de arquivos ou Promises. Nesses casos, o Jasmine precisa saber que deve aguardar a conclusão da operação assíncrona antes de avaliar o teste.
Mocks
São objetos simulados usados em testes automatizados para imitar o comportamento de componentes reais, permitindo isolar a unidade de código testada e controlar seus cenários de execução. Eles são úteis para verificar interações, definir retornos controlados e evitar efeitos colaterais de dependências externas.
No Jasmine, os spies são a principal forma de implementar mocks: eles monitoram chamadas de funções (como quantas vezes foram chamadas e com quais argumentos), permitem substituir a implementação real por versões simuladas e facilitam a verificação de interações durante o teste.
São criados para atender a casos de teste específicos.
1. Async/await
Normalmente, a maneira mais conveniente de escrever testes assíncronos é usar
async/await
.
Funçõesasync
retornam implicitamente uma Promise. O Jasmine aguardará até que a Promise retornada seja resolvida ou rejeitada antes de prosseguir para o próximo item na fila.
Promises rejeitadas causarão a falha do teste, ou uma falha no nível do conjunto (suite-level failure) no caso debeforeAll
ouafterAll
.
Exemplo
beforeEach(async function() {
await preparaAmbiente();
});
it('deve retornar o valor esperado', async function() {
const resultado = await buscarValor();
expect(resultado).toEqual(42);
});
2. Promises
Você também pode retornar diretamente uma Promise. O Jasmine reconhecerá automaticamente e aguardará a resolução ou rejeição.
Exemplo
beforeEach(function() {
return preparaAmbiente();
});
it('deve resolver a promessa corretamente', function() {
return buscarValor().then(function(resultado) {
expect(resultado).toEqual(42);
});
});
3. Callbacks (done
)
Se uma função de teste ou beforeEach
aceita um argumento, o Jasmine passará uma função especial chamada done
. Seu código deve chamar done()
ao concluir a operação assíncrona.
⚠️ Atenção:
done()
deve ser chamado exatamente uma vez, e apenas após o término do teste.
Exemplo
beforeEach(function(done) {
preparaAmbiente(() => {
done();
});
});
it('deve retornar resultado via callback', function(done) {
buscarValorComCallback(function(resultado) {
expect(resultado).toEqual(42);
done();
});
});
Lidando com erros
Para indicar uma falha ao Jasmine ao usar done
, chame done.fail()
:
it('deve tratar erro no callback', function(done) {
buscarComErro(function(err, resultado) {
if (err) {
done.fail(err);
return;
}
expect(resultado).toBe(42);
done();
});
});
4. Relógio Simulado com jasmine.clock()
Quando se testa código baseado em tempo (como setTimeout
), é possível simular a passagem do tempo usando o relógio falso do Jasmine.
Exemplo
beforeEach(function() {
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
});
it('deve executar após 10 segundos', function() {
const callback = jasmine.createSpy('callback');
executarDepois(callback); // executa após 10s
jasmine.clock().tick(10000); // simula a passagem do tempo
expect(callback).toHaveBeenCalledWith(12345);
});
Resumo
Abordagem | Características principais | Quando falha |
---|---|---|
async/await | Sintaxe moderna, clara e recomendada | Promise rejeitada ou erro lançado |
Promises | Retorno direto de Promise, sem async/await | Promise rejeitada |
Callbacks (done ) | Para APIs antigas ou base legado | done() não chamado ou chamado incorretamente |
Relógio Simulado | Testa delays com setTimeout sem esperar de verdade | Se esquecer install() ou uninstall() |
Cebraspe
Código da Questão: Q3167138
Ano: 2025
Banca: CESPE / CEBRASPE
Órgão: TRF - 6ª REGIÃO
Cargo: Analista Judiciário — Área: Apoio Especializado — Especialidade: Análise de Sistemas de Informação
No que se refere a testes de verificação de qualidade de códigos automatizados e à persistência, julgue o próximo item.
Nos testes com Jasmine, o comando beforeAll
pode ser utilizado com promises ou funções assíncronas (como async
ou await
), para garantir que o código de preparação seja executado de forma assíncrona, antes dos testes.
- ( ) Certo
- ( ) Errado
Gabarito oficial: Certo ✅