Skip to content

test: Update tests to be compatible with Jest 27 #639

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
"docz-theme-default": "1.2.0",
"docz-utils": "2.3.0",
"eslint": "7.28.0",
"kcd-scripts": "10.0.0",
"kcd-scripts": "11.1.0",
"prettier": "^2.2.1",
"react": "17.0.2",
"react-dom": "^17.0.1",
Expand Down
41 changes: 41 additions & 0 deletions src/__tests__/defaultRenderer.pure.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/* eslint-disable @typescript-eslint/no-var-requires */
import { ReactHooksRenderer } from '../types/react'

describe('default renderer', () => {
beforeEach(() => {
jest.resetModules()
})

test('should resolve native renderer as default renderer', () => {
const expectedRenderer = require('../native/pure') as ReactHooksRenderer
const actualRenderer = require('../pure') as ReactHooksRenderer
Comment on lines +10 to +11
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was the only test where I felt the requires in the tests were still appropriate. I worked around the issue by changing to use the pure imports instead. This left the non-pure import uncovered, which is why I introduced the simplified test file for it.


expect(actualRenderer).toEqual(expectedRenderer)
})

test('should resolve dom renderer as default renderer', () => {
jest.doMock('react-test-renderer', () => {
throw new Error('missing dependency')
})

const expectedRenderer = require('../dom/pure') as ReactHooksRenderer
const actualRenderer = require('../pure') as ReactHooksRenderer

expect(actualRenderer).toEqual(expectedRenderer)
})

test('should throw error if a default renderer cannot be resolved', () => {
jest.doMock('react-test-renderer', () => {
throw new Error('missing dependency')
})

jest.doMock('react-dom', () => {
throw new Error('missing dependency')
})

const expectedMessage =
"Could not auto-detect a React renderer. Are you sure you've installed one of the following\n - react-dom\n - react-test-renderer\nIf you are using a bundler, please update your imports to use a specific renderer.\nFor instructions see: https://react-hooks-testing-library.com/installation#being-specific"

expect(() => require('../pure')).toThrowError(new Error(expectedMessage))
})
})
37 changes: 2 additions & 35 deletions src/__tests__/defaultRenderer.test.ts
Original file line number Diff line number Diff line change
@@ -1,41 +1,8 @@
/* eslint-disable @typescript-eslint/no-var-requires */
import { ReactHooksRenderer } from '../types/react'
import * as actualRenderer from '..'
import * as expectedRenderer from '../native'

describe('default renderer', () => {
beforeEach(() => {
jest.resetModules()
})

test('should resolve native renderer as default renderer', () => {
const expectedRenderer = require('../native/pure') as ReactHooksRenderer
const actualRenderer = require('..') as ReactHooksRenderer

expect(actualRenderer).toEqual(expectedRenderer)
})

test('should resolve dom renderer as default renderer', () => {
jest.doMock('react-test-renderer', () => {
throw new Error('missing dependency')
})

const expectedRenderer = require('../dom/pure') as ReactHooksRenderer
const actualRenderer = require('..') as ReactHooksRenderer

expect(actualRenderer).toEqual(expectedRenderer)
})

test('should throw error if a default renderer cannot be resolved', () => {
jest.doMock('react-test-renderer', () => {
throw new Error('missing dependency')
})

jest.doMock('react-dom', () => {
throw new Error('missing dependency')
})

const expectedMessage =
"Could not auto-detect a React renderer. Are you sure you've installed one of the following\n - react-dom\n - react-test-renderer\nIf you are using a bundler, please update your imports to use a specific renderer.\nFor instructions see: https://react-hooks-testing-library.com/installation#being-specific"

expect(() => require('..')).toThrowError(new Error(expectedMessage))
})
})
8 changes: 2 additions & 6 deletions src/dom/__tests__/autoCleanup.disabled.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,8 @@ import { ReactHooksRenderer } from '../../types/react'
// then we DON'T auto-wire up the afterEach for folks
describe('skip auto cleanup (disabled) tests', () => {
let cleanupCalled = false
let renderHook: ReactHooksRenderer['renderHook']

beforeAll(() => {
process.env.RHTL_SKIP_AUTO_CLEANUP = 'true'
renderHook = (require('..') as ReactHooksRenderer).renderHook
})
process.env.RHTL_SKIP_AUTO_CLEANUP = 'true'
const renderHook = (require('..') as ReactHooksRenderer).renderHook

test('first', () => {
const hookWithCleanup = () => {
Expand Down
10 changes: 3 additions & 7 deletions src/dom/__tests__/autoCleanup.noAfterEach.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,9 @@ import { ReactHooksRenderer } from '../../types/react'
// then we DON'T auto-wire up the afterEach for folks
describe('skip auto cleanup (no afterEach) tests', () => {
let cleanupCalled = false
let renderHook: ReactHooksRenderer['renderHook']

beforeAll(() => {
// @ts-expect-error Turning off AfterEach -- ignore Jest LifeCycle Type
afterEach = false
renderHook = (require('..') as ReactHooksRenderer).renderHook
})
// @ts-expect-error Turning off AfterEach -- ignore Jest LifeCycle Type
afterEach = false
const renderHook = (require('..') as ReactHooksRenderer).renderHook

test('first', () => {
const hookWithCleanup = () => {
Expand Down
23 changes: 7 additions & 16 deletions src/dom/__tests__/autoCleanup.noProcessEnv.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,15 @@ import { ReactHooksRenderer } from '../../types/react'

// This verifies that if process.env is unavailable
// then we still auto-wire up the afterEach for folks
describe('skip auto cleanup (no process.env) tests', () => {
const originalEnv = process.env
describe('auto cleanup (no process.env) tests', () => {
let cleanupCalled = false
let renderHook: ReactHooksRenderer['renderHook']

beforeAll(() => {
process.env = {
...process.env,
get RHTL_SKIP_AUTO_CLEANUP(): string | undefined {
throw new Error('expected')
}
process.env = {
...process.env,
get RHTL_SKIP_AUTO_CLEANUP(): string | undefined {
throw new Error('expected')
}
renderHook = (require('..') as ReactHooksRenderer).renderHook
})

afterAll(() => {
process.env = originalEnv
})
}
const renderHook = (require('..') as ReactHooksRenderer).renderHook

test('first', () => {
const hookWithCleanup = () => {
Expand Down
8 changes: 1 addition & 7 deletions src/dom/__tests__/autoCleanup.pure.test.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
import { useEffect } from 'react'

import { ReactHooksRenderer } from '../../types/react'
import { renderHook } from '../pure'

// This verifies that if pure imports are used
// then we DON'T auto-wire up the afterEach for folks
describe('skip auto cleanup (pure) tests', () => {
let cleanupCalled = false
let renderHook: ReactHooksRenderer['renderHook']

beforeAll(() => {
renderHook = (require('../pure') as ReactHooksRenderer).renderHook
})

test('first', () => {
const hookWithCleanup = () => {
Expand Down
2 changes: 1 addition & 1 deletion src/dom/__tests__/errorHook.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useState, useEffect } from 'react'
import { renderHook, act } from '..'
import { renderHook } from '..'

describe('error hook tests', () => {
function useError(throwError?: boolean) {
Expand Down
7 changes: 2 additions & 5 deletions src/dom/__tests__/errorSuppression.disabled.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,8 @@
// then we DON'T auto-wire up the afterEach for folks
describe('error output suppression (disabled) tests', () => {
const originalConsoleError = console.error

beforeAll(() => {
process.env.RHTL_DISABLE_ERROR_FILTERING = 'true'
require('..')
})
process.env.RHTL_DISABLE_ERROR_FILTERING = 'true'
require('..')

test('should not patch console.error', () => {
expect(console.error).toBe(originalConsoleError)
Expand Down
9 changes: 3 additions & 6 deletions src/dom/__tests__/errorSuppression.noAfterEach.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,9 @@
// then we DON'T auto-wire up the afterEach for folks
describe('error output suppression (noAfterEach) tests', () => {
const originalConsoleError = console.error

beforeAll(() => {
// @ts-expect-error Turning off AfterEach -- ignore Jest LifeCycle Type
afterEach = false
require('..')
})
// @ts-expect-error Turning off AfterEach -- ignore Jest LifeCycle Type
afterEach = false
require('..')

test('should not patch console.error', () => {
expect(console.error).toBe(originalConsoleError)
Expand Down
9 changes: 3 additions & 6 deletions src/dom/__tests__/errorSuppression.noBeforeEach.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,9 @@
// then we DON'T auto-wire up the afterEach for folks
describe('error output suppression (noBeforeEach) tests', () => {
const originalConsoleError = console.error

beforeAll(() => {
// @ts-expect-error Turning off BeforeEach -- ignore Jest LifeCycle Type
beforeEach = false
require('..')
})
// @ts-expect-error Turning off BeforeEach -- ignore Jest LifeCycle Type
beforeEach = false
require('..')

test('should not patch console.error', () => {
expect(console.error).toBe(originalConsoleError)
Expand Down
20 changes: 6 additions & 14 deletions src/dom/__tests__/errorSuppression.noProcessEnv.test.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,14 @@
// This verifies that if process.env is unavailable
// then we still auto-wire up the afterEach for folks
describe('error output suppression (no process.env) tests', () => {
const originalEnv = process.env
const originalConsoleError = console.error

beforeAll(() => {
process.env = {
...process.env,
get RHTL_DISABLE_ERROR_FILTERING(): string | undefined {
throw new Error('expected')
}
process.env = {
...process.env,
get RHTL_DISABLE_ERROR_FILTERING(): string | undefined {
throw new Error('expected')
}
require('..')
})

afterAll(() => {
process.env = originalEnv
})
}
require('..')

test('should not patch console.error', () => {
expect(console.error).not.toBe(originalConsoleError)
Expand Down
8 changes: 1 addition & 7 deletions src/dom/__tests__/errorSuppression.pure.test.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
import { ReactHooksRenderer } from '../../types/react'
import { suppressErrorOutput } from '../pure'

// This verifies that if pure imports are used
// then we DON'T auto-wire up the afterEach for folks
describe('error output suppression (pure) tests', () => {
const originalConsoleError = console.error

let suppressErrorOutput!: ReactHooksRenderer['suppressErrorOutput']

beforeAll(() => {
suppressErrorOutput = (require('../pure') as ReactHooksRenderer).suppressErrorOutput
})

test('should not patch console.error', () => {
expect(console.error).toBe(originalConsoleError)
})
Expand Down
11 changes: 3 additions & 8 deletions src/dom/__tests__/errorSuppression.test.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import { useEffect } from 'react'

import { ReactHooksRenderer } from '../../types/react'
import { renderHook, act, suppressErrorOutput } from '..'

describe('error output suppression tests', () => {
const consoleError = console.error

test('should not suppress relevant errors', () => {
const consoleError = console.error
console.error = jest.fn()

const { suppressErrorOutput } = require('..') as ReactHooksRenderer

try {
const restoreConsole = suppressErrorOutput()

Expand All @@ -28,8 +25,6 @@ describe('error output suppression tests', () => {
})

test('should allow console.error to be mocked', async () => {
const { renderHook, act } = require('..') as ReactHooksRenderer
const consoleError = console.error
console.error = jest.fn()

try {
Expand Down
8 changes: 2 additions & 6 deletions src/native/__tests__/autoCleanup.disabled.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,8 @@ import { ReactHooksRenderer } from '../../types/react'
// then we DON'T auto-wire up the afterEach for folks
describe('skip auto cleanup (disabled) tests', () => {
let cleanupCalled = false
let renderHook: ReactHooksRenderer['renderHook']

beforeAll(() => {
process.env.RHTL_SKIP_AUTO_CLEANUP = 'true'
renderHook = (require('..') as ReactHooksRenderer).renderHook
})
process.env.RHTL_SKIP_AUTO_CLEANUP = 'true'
const renderHook = (require('..') as ReactHooksRenderer).renderHook

test('first', () => {
const hookWithCleanup = () => {
Expand Down
10 changes: 3 additions & 7 deletions src/native/__tests__/autoCleanup.noAfterEach.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,9 @@ import { ReactHooksRenderer } from '../../types/react'
// then we DON'T auto-wire up the afterEach for folks
describe('skip auto cleanup (no afterEach) tests', () => {
let cleanupCalled = false
let renderHook: ReactHooksRenderer['renderHook']

beforeAll(() => {
// @ts-expect-error Turning off AfterEach -- ignore Jest LifeCycle Type
afterEach = false
renderHook = (require('..') as ReactHooksRenderer).renderHook
})
// @ts-expect-error Turning off AfterEach -- ignore Jest LifeCycle Type
afterEach = false
const renderHook = (require('..') as ReactHooksRenderer).renderHook

test('first', () => {
const hookWithCleanup = () => {
Expand Down
23 changes: 7 additions & 16 deletions src/native/__tests__/autoCleanup.noProcessEnv.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,15 @@ import { ReactHooksRenderer } from '../../types/react'

// This verifies that if process.env is unavailable
// then we still auto-wire up the afterEach for folks
describe('skip auto cleanup (no process.env) tests', () => {
const originalEnv = process.env
describe('auto cleanup (no process.env) tests', () => {
let cleanupCalled = false
let renderHook: ReactHooksRenderer['renderHook']

beforeAll(() => {
process.env = {
...process.env,
get RHTL_SKIP_AUTO_CLEANUP(): string | undefined {
throw new Error('expected')
}
process.env = {
...process.env,
get RHTL_SKIP_AUTO_CLEANUP(): string | undefined {
throw new Error('expected')
}
renderHook = (require('..') as ReactHooksRenderer).renderHook
})

afterAll(() => {
process.env = originalEnv
})
}
const renderHook = (require('..') as ReactHooksRenderer).renderHook

test('first', () => {
const hookWithCleanup = () => {
Expand Down
8 changes: 1 addition & 7 deletions src/native/__tests__/autoCleanup.pure.test.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
import { useEffect } from 'react'

import { ReactHooksRenderer } from '../../types/react'
import { renderHook } from '../pure'

// This verifies that if pure imports are used
// then we DON'T auto-wire up the afterEach for folks
describe('skip auto cleanup (pure) tests', () => {
let cleanupCalled = false
let renderHook: ReactHooksRenderer['renderHook']

beforeAll(() => {
renderHook = (require('../pure') as ReactHooksRenderer).renderHook
})

test('first', () => {
const hookWithCleanup = () => {
Expand Down
Loading