We use [jest](https://jestjs.io/) and [testing-library](https://testing-library.com/) to primarily
handle unit tests and integration tests for our application, and [cypress](https://www.cypress.io/) for end to end (E2E) tests.

Tests are ran against our continuous integration which uses [circleCI](https://circleci.com/).

### Writing tests
Jest provides both <abbr title="Behavior-Driven Development">BDD</abbr> and <abbr title="Test-Driven Development">TDD</abbr> syntax and we are flexible about our choices on what to use, but we like our tests to be descriptive.

Here are some helpful tips that can speed up your testing process.

##### Focus on a describe block in a test and skip other tests
```jsx static
fdescribe('Only run everything here', () => {
    it('does something', () => {
        //...
    })
    it('does something else', () => {
        //...
    })
})
describe('I am skipped', () => {
    it('does something', () => {
        //...
    })
    it('does something else', () => {
        //...
    })
})
```

##### Focus on a it block in a test and skip other tests
```jsx static
describe('running one', () => {
    fit('only run me', () => {
        //...
    })
    it('does something else', () => {
        //...
    })
})
```

##### Exempt one or more specs from being run
```jsx static
describe('running one', () => {
    it('does something', () => {
        //...
    })
    xit('I get skipped', () => {
        //...
    })
})
```

```jsx noeditor
import Note from '../../src/_doc/Note';

<Note>
Try to remove all <code>fdescribe</code>, <code>xdescribe</code>, <code>fit</code> and <code>xit</code> before pushing a PR.
</Note>
```