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
58
What did we Learn with JavaScript Fatigue? (FrontMania)
lucasfcosta
1
70
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
98
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
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
6
2.1k
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
770
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
160
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
4.8k
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
440
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
4.7k
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
530
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
150
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
450
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
160
ゲームの物理 剛体編
fadis
0
400
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
870
Site-Speed That Sticks
csswizardry
13
1k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
37
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
100
Fireside Chat
paigeccino
41
3.8k
Faster Mobile Websites
deanohume
310
31k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
210
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
31
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
110
Agile that works and the tools we love
rasmusluckow
331
21k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
76
Music & Morning Musume
bryan
46
7k
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