Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Testes em JS Como Você Nunca Viu Antes
Search
Lucas Fernandes da Costa
November 26, 2016
Programming
0
360
Testes em JS Como Você Nunca Viu Antes
My slides for the presentation in JSDay Recife 2017, which happened at Nov. 26th, 2016.
Lucas Fernandes da Costa
November 26, 2016
Tweet
Share
More Decks by Lucas Fernandes da Costa
See All by Lucas Fernandes da Costa
Types, tests, and why flat-earthers are bad at QA (HolyJS)
lucasfcosta
0
64
What did we Learn with JavaScript Fatigue? (FrontMania)
lucasfcosta
1
77
How I'm still not using GUIs in 2019
lucasfcosta
0
68
Programming with Birds - There is a Bluebird in My Talk That Wants to Get Out (LambdAle 2018)
lucasfcosta
0
130
What can we learn with JavaScript Fatigue? - FrontEnd United
lucasfcosta
2
220
What Can We Learn With JavaScript Fatigue? - The Conf SP
lucasfcosta
0
100
What Can We Learn With JavaScript Fatigue? - NebraskaJS
lucasfcosta
2
120
JavaScript Behind the Scenes: Meta Programming (FluentConf 2017)
lucasfcosta
0
150
Testes em JavaScript: A Maneira Correta
lucasfcosta
0
78
Other Decks in Programming
See All in Programming
AtCoder Conference 2025
shindannin
0
1k
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
110
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
670
2026年 エンジニアリング自己学習法
yumechi
0
120
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
170
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
390
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
630
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
360
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
410
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
400
Featured
See All Featured
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
88
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
290
It's Worth the Effort
3n
188
29k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Site-Speed That Sticks
csswizardry
13
1.1k
How to train your dragon (web standard)
notwaldorf
97
6.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
820
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Testing 201, or: Great Expectations
jmmastey
46
8k
Building Applications with DynamoDB
mza
96
6.9k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
50
Transcript
Testes em JavaScript Como você nunca viu antes @lfernandescosta @lucasfcosta
lucasfcosta.com
‣ Sistemas de Informação @UFSC ‣ FullStack Developer @MyTapp ‣
ChaiJS Core Maintainer ‣ Apaixonado por Open Source Quem sou eu?
‣ Sistemas de Informação @UFSC ‣ FullStack Developer @MyTapp ‣
ChaiJS Core Maintainer ‣ Apaixonado por Open Source Quem sou eu? Internacionalmente conhecido por causar prejuízo em buffet livre de sushi
Quem sou eu? @lfernandescosta @lucasfcosta lucasfcosta.com
Por que testar?
Qualidade do código
Ok, todo mundo sabe disso Qualidade do código
Agilidade Melhores estimativas Mais feedback Mais rápido
< Redução de custos
QA + Trabalho Proativo - Trabalho Reativo
Validação ‣ Feedback rápido ‣ Prova que o código está
correto OS DOIS LADOS DO TDD TDD
Validação Unde omnis iste. ‣ Feedback rápido ‣ Prova que
o código está correto OS DOIS LADOS DO TDD Especificação TDD ‣ Demonstra o que aquela peça deve fazer ‣ Demonstra os resultados esperados
Validação Unde omnis iste. ‣ Feedback rápido ‣ Prova que
o código está correto OS DOIS LADOS DO TDD Especificação TDD ‣ Demonstra o que aquela peça deve fazer ‣ Demonstra os resultados esperados O teste serve como spec
Requisitos mais claros Primeiro você pensa
Requisitos mais claros Primeiro você pensa Depois você coda
Test Driven Design
Program to an interface, not an implementation
Program to an interface, not an implementation Menos acoplamento
"TDD Should be Fun" - James Sinclair
Feedback Loop Metas de Longo Prazo Recompensas Rápidas VS.
Feedback Loop Metas de Longo Prazo Recompensas Rápidas VS. ‣
Feedback positivo constante e rápido
Feedback Loop Metas de Longo Prazo Recompensas Rápidas VS. ‣
Feedback positivo constante e rápido ‣ Reduz o medo, prova que você está no caminho certo
Feedback Loop Metas de Longo Prazo Recompensas Rápidas VS. ‣
Feedback positivo constante e rápido ‣ Você sabe que está no caminho certo DIVERSÃO
Bons motivos para testar:
Bons motivos para testar: 1 Agilidade
Bons motivos para testar: 1 Agilidade 2 Redução de custos
Bons motivos para testar: 1 Agilidade 2 3 Redução de
custos QA Proativo
Bons motivos para testar: 1 Agilidade 2 4 3 Redução
de custos Especificação QA Proativo
Bons motivos para testar: 1 Agilidade 2 4 5 3
Redução de custos Especificação QA Proativo Test Driven Design
Bons motivos para testar: 1 Agilidade 2 4 5 6
3 Redução de custos Especificação QA Proativo Diversão Test Driven Design
Como escrever bons testes?
Só automatizar não é o suficiente
Automated crap is still crap
Você não pode provar que seu software funciona
Você não pode provar que seu software funciona Você só
pode provar que ele não funciona
Desenvolvimento em pequenos passos
Desenvolvimento em pequenos passos Mais segurança
Passos do tamanho da sua segurança
Passos do tamanho da sua segurança
"Qual tamanho devem ter meus testes?"
"Qual tamanho devem ter meus testes?"
"Qual tamanho devem ter meus testes?" O necessário
"Qual tamanho devem ter meus testes?" O necessário Somente o
necessário
"Qual tamanho devem ter meus testes?" O necessário Somente o
necessário O extraordinário é demais
Isolamento Teste unitário testa apenas uma unidade (função)
Isolamento Teste unitário testa apenas uma unidade (função) Quando algo
falhar, sabemos pontualmente o que falhou
Isolamento
Independência Um teste depende apenas de uma “peça”
Independência Um teste depende apenas de uma “peça” Um defeito
causa falha em um teste
Independência Stubs
Independência
Foco Um teste tem apenas um objetivo
Foco Um teste tem apenas um objetivo Faça o mínimo
de asserções por teste
Foco Evite testes "frouxos"
Foco Evite testes "frouxos"
Foco Evite testes "frouxos" Quantos testes passam nisso?
Foco
Desacoplamento O teste não depende da implementação
Desacoplamento O teste não depende da implementação Program to an
interface, not an implementation
Desacoplamento Você paga por testes em manutenção
Para fazer bons testes:
Para fazer bons testes: 1 Isolamento
Para fazer bons testes: 1 Isolamento 2 Independência
Para fazer bons testes: 1 Isolamento 2 3 Independência Foco
Para fazer bons testes: 1 Isolamento 2 3 4 Independência
Foco Desacoplamento
Estou no caminho certo?
Testes que falham são testes que produzem informações
Testes que falham são testes que produzem informações Se arrisque
Code coverage é bom
Code coverage é bom Mas não é tudo
100% Code Coverage function incrementaIndice(arr, i) ➡ Soma 1 ao
valor de índices já existentes ➡ Se o valor naquele índice é indefinido ele passa a ser 1
100% Code Coverage
100% Code Coverage Asserções
100% Code Coverage Asserções Possibilidades de entrada
Medindo Coverage
Medindo Coverage
Cross-platform
Cross-platform Diferentes implementações
Cross-platform Diferentes implementações Diferentes features suportadas
Cross-platform Tenha fallbacks
O ecossistema parece grande…
O ecossistema parece grande…
O ecossistema parece grande… Mas é simples
The UNIX Philosophy
Mais possibilidades The UNIX Philosophy
Mais possibilidades Aprendizado gradual The UNIX Philosophy
Recapitulando:
Recapitulando: 1 Mocha
Recapitulando: 1 2 Mocha Chai
Recapitulando: 1 2 3 Mocha Chai Sinon
Recapitulando: 1 2 4 3 Mocha Chai Sinon Istanbul
Recapitulando: 1 2 4 5 3 Mocha Chai Sinon Istanbul
Karma
Valeu, Recife!
Valeu, Recife! Free software is great software