Testing 101

Or that time i got way too obsessed with testing a package I was building

Hew

@hewIngram

THE BASICS

Avoid bugs

Ensure functionality works

Safely deploy anytime

Reliable, predictable code

Better code?

E2E

Integration

Unit

Linting

Linting

Find possible logic errors

Promote best practice

Promote stylistic consistency

Pssst...

Fail fast

Zero setup

(basically)

Great configs to start with

Customizable

🎉

Accessibility + security

File by file

🤮

Annoying to introduce in legacy codebases

Unit

E2E

Integration

Unit

Linting

Should return 'apples' if inputAnimal is hippo

Should return null if inputAnimal is not in animalConfig

Snapshot tests mean I don't need unit tests anymore... right?

Fast to run

 

Easy setup

🎉

Promotes good code

Fast to build

Tests only a single function

🤮

Can be fragile

Not all code is unit testable

E2E

Integration

Unit

Linting

More real

Slower

Harder to build

Integration

Closer to 'real' usage

Great as code/team grows

🎉

Hard to setup

🤮

Errors can be hard to pinpoint

Slower to run

E2E

Super real

Tests loads of things at once

🎉

Getting easier to write

SO SLOW

🤮

Hard setup

(historically)

Brittle

Can be hard to find root cause if there are errors

Linting

Unit tests

Integration

End to End

Mutation

E2E

Integration

Unit

Linting

Fuzz testing

F̷̢̧̧̧̧̛͓͚̦̼̺̝̝̞̱̦̟̘͍͈͈͕̩̼̣̩̠͍̥̤̤̹̦̝̺̼͓̤̯̱̳͎͚̺͔̯̯͕͓̝̯͎͔̱̯͖͖̞̊̈́̓̈̒͊̈́̿̀̀̌̈̀̏̄̿̃͗̈́̉̉̆̐̌̒͑̔͑̿̈́̏̾̌͌̏̓̿̐̅̓͗̄̂͌̂̂̂̋͂̈́̄̾̆̐̐̀̈́̀̅̿̑̇̎̿̐̒́̿́͒͗̽̓͒͐̋̍͋̕͘̚͘̚͠͝ͅư̴̢̧̨̨̡̛̬̣͎͔̗̬͖̟̠̤̹͖͙̺̻̹̼̦̬͈̟̰͔̟̹̟̭͉̝̳̩͓̦̙̰͔̣̱͙̣͓͓̻̱̪͓̤̭͙̞̫̗̭̯̖͙̱̠͉̖̺̪̰̬̺͉̝̜̠͎͕̪̭͎͎͖̼͎͇̲̝̰̣͋̾͐͛̃̓́̓͜͜͜͜ẕ̴̨̧̨̡̨̡̰̟̲͔̱͍̬͈̲̬͖̟̦̭̳̣͓̣̖̙̩̺̤̭͓̫͔̬̰̮͙̰̪͍̠̭̲͖̞̰̳͍̲̞̭̥̘͖̫̙̥͉̮̱̮́͋̔̇̅̎̽̾̑͌̏̈́̈̃̈̄̊̎͒̒͂̂̇̏̀͋̉̔̾̓̃̈́́͆̀̓̊̋̈́͐͂͆́͐͂̈́̕̚̚͘͜͜͜͝͝͝͝ͅz̸̛̛̻̯̱̱̺̫͍͔̔̋́͑̉̔̀́̈̈́͗̐̈̀̐͑̋̏͂̈́͐͑̆͐̂̈͊̑̈́̽̈́́̀́̿̇͋́͐̊̏̒́́͂̈́̋́̕̚̕̕̕͝͝͠͝͝ ̴̧̨̡̧̡̟͎̭͔͖̮̺͖͙̼̦̻͍͚̭̠̟̯͔͍̖̝͎̠̭̱̦̱̻̤͚̺̲̞̩͍̭̼̲̻͎͙̝͔̺̖̘̫̰͚̮͉̯̬̩͖̭̞̹̻̻͍͖͉̥̮͖̫͙̦͉̘͙̞̲̼̯̩̞̯̗̗̬̫͍̇́̀̍̎̾̏͋̅̀͌̓̋̾͊̀̃͆̄͋͌̇͆̈́̊̊̆̿́̊͑̏̄̐̎̄̈́̔̐̀̽̃̄̓͊͗̋̇̓̽̐͐͒͒̔̈͌̀͂̆̊̍̉́͑̕̚̕̕͜͜͜͜͝͝ͅͅͅt̷̢̨̡̡̧̛̛̙̱̦̗̹̫̥̭͉̩͙̯̖̖̟̥͕̥̳̥̹̩̳̮̟̝͔̬͇̠̰̠̮̳̖͍̮̬̝̜͇̠̠̱̗̖̩͕̲̤̬̱̲̹̗̳̞̣͕̼̳̯̰̮͆̋́̅̄͂͋̐̐̑̄̿̀̑̿̿̎̆̉̔̅̉̾̈́͛̔̐̈́͐̌͗́͗̀̀̊̄̉̽̉͛̅̽̃̉́̅͒̇̃́̍̈́̄͋̕̚͘̚̚̚̚͜͜͜͜͠͠͝͝͠͝͠͝ͅé̵̡̡̢̡̨̛̤͉̦͈̟̱̜̯͈͎͉͎̹͖͎̘̮͓̻͓̱̫̩̘̥͙̺̖̟̿̑̀̔̑̈́͛̓͌̊̔̔̑̒͗̈͆̂̉̅̏̽̇̚̕͝ͅͅs̷̡̛̙͓̲̱͉̥̩̠͋̓̽͑̃̉͌̐̐͗̀̃̓̌̇̿̓̆͂͗̇̍͘̚̕ţ̴̨̨̢̙̠̝̼̭̗̞͉̲͇̜̙͔̩̻̠̟̯̪̫̯̜̞͚̼͚͚̫̬̪̰͍͎̭̻̳̘̩͇͍̖͕̣̱̤̥͖̫̊̏̄́͑̀i̴̧̦͙͙̱̹̰̲̭͔̤͍̦̼̰̻̱̩̩͍̘̪̘̥͉͓̟̰̳̱̖̍͆̋͆͊̉̉̀̿̑́̇̇͆̎̒͘͘͜͝͝n̶̛̛̬̤̱̼̯̰͖̮̲̦̻͍̯͖̈̒̃͆̌̔̍̿̐̆͒͂͊̂͒̽̈̑̔̊́̃̂̋͒̈́̃͂͆̀̓̂͐̃̔̅̀̊̆̽̆͑̄̅͋̑͋̓̈́̌̏͐̉͌͐͋̓̓̑͒͌́̿̃̋̔͊̿̐̓̔̍̋͛̾̅̄̃̄̈̚͘͘̚̚̕͝͝͠͠͝͝ģ̸̛̮͎͙̱̘̺̝̹̾̓̉͗͗͛͌͆̽̇̃̌̓͊͂̇͗̈́͗̄̎̐̆́̋̊̃́̍̃̏̈́̔̌̈́͐̿̾̋̍̌̒̑̄̈́̊̑̋͗̽̈́̍̇̽̕̕̚̚͘̚͠

REALLY test your code

Get to feel super cool using a weird testing method

🎉

Increased confidence

Can be very slow

🤮

Immature in JS

Only applicable to some things

But... I want to know my tests are good

Tests your tests!

Easy with libraries like Stryker

🎉

CPU intensive

🤮

Immature in JS

Only mutates return values...

Mutation

E2E

Integration

Unit

Linting

Fuzz testing

Thanks

@hewIngram

Testing 101

By hewingram

Testing 101

  • 170