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
230
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
26
What did we Learn with JavaScript Fatigue? (FrontMania)
lucasfcosta
1
44
How I'm still not using GUIs in 2019
lucasfcosta
0
55
Programming with Birds - There is a Bluebird in My Talk That Wants to Get Out (LambdAle 2018)
lucasfcosta
0
110
What can we learn with JavaScript Fatigue? - FrontEnd United
lucasfcosta
2
150
What Can We Learn With JavaScript Fatigue? - The Conf SP
lucasfcosta
0
70
What Can We Learn With JavaScript Fatigue? - NebraskaJS
lucasfcosta
2
86
JavaScript Behind the Scenes: Meta Programming (FluentConf 2017)
lucasfcosta
0
120
Testes em JavaScript: A Maneira Correta
lucasfcosta
0
61
Other Decks in Programming
See All in Programming
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
670
Changed Rules: Architectures with Lightweight Stores
manfredsteyer
PRO
0
240
Semantic search with Django and pgvector
pauloxnet
0
240
Rails と人魚の話/rails-and-mermaid
sanfrecce_osaka
0
100
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
320
Goのエラースタックトレースの歴史と今後
sonatard
6
490
Azure OpenAI Serviceのプロンプトエンジニアリング入門
tomokusaba
3
590
PHPはいつから死んでいるかの調査
chiroruxx
1
350
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
920
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
210
educure_カリキュラム生操作マニュアル.pdf
linew_official
0
630
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
250
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
Visualization
eitanlees
135
14k
Rails Girls Zürich Keynote
gr2m
91
13k
Designing for Performance
lara
601
67k
Web Components: a chance to create the future
zenorocha
305
41k
Making Projects Easy
brettharned
108
5.5k
Building Applications with DynamoDB
mza
88
5.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
119
39k
Statistics for Hackers
jakevdp
789
220k
KATA
mclloyd
14
12k
Design by the Numbers
sachag
274
18k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
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