Skip to content

Commit

Permalink
feat(cleanup): automatically cleanup if afterEach is detected
Browse files Browse the repository at this point in the history
You can disable this with the RTL_SKIP_CLEANUP environment variable if
you so choose, but it's recommended to have cleanup work this way.

Closes #428
  • Loading branch information
Kent C. Dodds committed Aug 9, 2019
1 parent 2f17920 commit 6862dd1
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 5 deletions.
18 changes: 18 additions & 0 deletions src/__tests__/auto-cleanup-skip.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import React from 'react'

let render
beforeAll(() => {
process.env.RTL_SKIP_CLEANUP = 'true'
const rtl = require('../')
render = rtl.render
})

// This one verifies that if RTL_SKIP_CLEANUP is set
// that we DON'T auto-wire up the afterEach for folks
test('first', () => {
render(<div>hi</div>)
})

test('second', () => {
expect(document.body.innerHTML).toEqual('<div><div>hi</div></div>')
})
13 changes: 13 additions & 0 deletions src/__tests__/auto-cleanup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import React from 'react'
import {render} from '../'

// This just verifies that by importing RTL in an
// environment which supports afterEach (like jest)
// we'll get automatic cleanup between tests.
test('first', () => {
render(<div>hi</div>)
})

test('second', () => {
expect(document.body.innerHTML).toEqual('')
})
10 changes: 10 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,16 @@ fireEvent.select = (node, init) => {
fireEvent.keyUp(node, init)
}

// if we're running in a test runner that supports afterEach
// then we'll automatically run cleanup afterEach test
// this ensures that tests run in isolation from each other
if (typeof afterEach === 'function' && !process.env.RTL_SKIP_CLEANUP) {
afterEach(async () => {
await asyncAct(async () => {})
cleanup()
})
}

// just re-export everything from dom-testing-library
export * from '@testing-library/dom'
export {render, cleanup, fireEvent, act}
Expand Down
5 changes: 0 additions & 5 deletions tests/setup-env.js
Original file line number Diff line number Diff line change
@@ -1,6 +1 @@
import '@testing-library/jest-dom/extend-expect'

afterEach(() => {
// have to do a dynamic import so we don't mess up jest mocking for old-act.js
require('../src').cleanup()
})

0 comments on commit 6862dd1

Please sign in to comment.