Keeping pull requests productive with linting and tests

Slides at the end

Green text are links

Making it easy to follow best practices


More useful code reviews


More useful code reviews


Faster development


Higher quality code

Great recruiting tool!

Replace (some) training with doc PRs

Reduce friction

speed up development and simplify refactors

Enforce best practices

e.g. automatically generate a unit test with each module

Code snippets

Same advantages as generators


Biggest problems

we stop writing and running tests when they're NOT...


Everyone knows when

tests are failing


Tests don't fail intermittently


Tests run quickly


When a test fails,

it's easy to learn why

End-to-end tests

with Cypress

Why Cypress?

Writing e2e tests

Best practices

Don't maintain state between tests

they should be able to run with it.only

Don't select elements with classes

think from the user's perspective, or select elements by intent

Integrating e2e tests

Integrate into your review process

with continuous integration

Write and run in development

Unit tests

with Jest

Why Jest?

Great output on failure

Why Jest?

Quite fast

Why not Jest?

Not a real browser


Why not Jest?

Have to reinvent your build config

Writing unit tests

Don't test that JS/libraries work

Writing unit tests

Usually use a shallow render

Writing unit tests

Writing unit tests

Pull out (potentially)

shared logic

Integrating unit tests

Never commit failing tests

run unit tests against staged files on a pre-commit hook

Continuous integration

make sure you know when tests are failing

Solve hard problems in setup files

create helpers and custom matchers to simplify complex assertions

First-class unit tests

Put unit tests next to the tested file

(e.g. hello.js and hello.unit.js)


  • never think about organization of unit tests
  • missing tests are very obvious
  • helps onboard new developers

That's all I know!


Keeping pull requests productive with linting and tests

By Chris Fritz

Keeping pull requests productive with linting and tests

The MIT License (MIT) Copyright (c) 2018-present Chris Fritz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

  • 838

More from Chris Fritz