Я тестирую код, который включает асинхронные функции.Даже при тестировании потока, который не использует await, тест не пройден.Когда я удаляю async / await (что возможно, поскольку тестируемый поток не требует этого), тест проходит.
Я создал упрощенный пример кода и теста.
(1) Пример кода, использующего async / await (хотя в этом нет необходимости, как в моем тестируемом потоке):
import React from 'react'
export class Example extends React.Component {
state = { first: false }
async func1 () {
const selection = await this.func2()
this.setState({ first: selection })
}
async func2 () {
return true
}
render () {
return null
}
}
(2) Тот же код без async / await:
import React from 'react'
export class Example extends React.Component {
state = { first: false }
func1 () {
const selection = this.func2()
this.setState({ first: selection })
}
func2 () {
return true
}
render () {
return null
}
}
И этот тест не пройден (третий expect
не пройден) для (1) и пройден для (2).Любая идея, почему и как написать тест, чтобы он работал для кода с async / await?
import React from 'react'
import { shallow } from 'enzyme'
import { Example } from '../../src/scenes/Recommendation/Patterns/Example'
let wrapper
describe('Testing Example', () => {
it('calls func1 properly', async () => {
wrapper = shallow(
<Example />
)
const instance = wrapper.instance()
const prevState = { first: false }
const expectedState = { first: true }
expect.assertions(2)
expect(instance.state).toEqual(prevState)
await instance.func1()
expect(instance.state).toEqual(expectedState)
})
})