Testing

Vi vill inte ha buggar och vi vill upptäcka buggar i tid

Olika typer av buggar

  • User Interface
  • Business Logic
  • Tillgänglighet
  • Säkerhet
  • Integration
  • m.m

Hur förhindrar vi buggar?

  • Statisk typning: Flow / TypeScript
  • Linting: ESLint
  • Testing: 👷🏽
// @flow
function square(n: number): number {
  return n * n;
}

square("2"); // Error!

Tre huvudsakliga tester

  • Unit Test
  • Integration Test
  • E2E Test
https://twitter.com/Una/status/850451564527591424
https://twitter.com/Una/status/850451564527591424
https://twitter.com/Una/status/850451564527591424
https://martinfowler.com/bliki/TestPyramid.html
https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html

Unit Testing

In computer programming, unit testing is a software testing method by which individual units of source code are tested to determine whether they are fit for use.
Ta den minsta enheten av testbar kod, isolera den och testa om den fungerar/returnerar det värde du förväntar dig

Koden förväntas returnera samma output av likadan input

Min fina kod

function add( a , b ){
  return a + b;
}

assert

state a fact or belief confidently and forcefully.

function assert(value) {
  return value ? "Pass" : "Fail";      
}
assert(add(1,1) === 2); //returns "Pass"

Förväntat beteende, returnerar false om vi introducerar en bugg i koden

Introducerar Dum Kod™

function add( a , b ){
  return a + b + 1; //🤔 hurr durr
}
assert(add(1,1) === 2); //returns "Fail"

Följer inte längre förväntat beteende, implementationen är fel.

Testramverk

Test framework

Ramverk för att köra flera olika tester automatiserat

Standardisera testandet

Inbyggda funktioner för de mest vanliga scenarion som ska testas

Vi ser över Jest

Skapar ett testprojekt från grunden

TDD

Test Driven Development

  • Skriv test
  • Få ett test att misslyckas
  • Få test att lyckas med så små medel som möjligt
  • Refaktorera
  • Få test att passera

Övning: Skapa unit tests

https://github.com/FEND16/unit-test-exercise

Fastställ vilken funktionalitet i appen som måste fungera

Testa sedan denna funktionalitet