Компонент для тестирования
class Carousel extends React.Component {
state = {
slides: null
}
componentDidMount = () => {
axios.get("https://s3.amazonaws.com/rainfo/slider/data.json").then(res => {
this.setState({ slides: res.data })
})
}
render() {
if (!slides) {
return null
}
return (
<div className="slick-carousel">
... markup trancated for bravity
</div>
)
}
}
export default Carousel
Тест
import React from "react"
import renderer from "react-test-renderer"
import axios from "axios"
import Carousel from "./Carousel"
const slides = [
{
ID: "114",
REFERENCE_DATE: "2018-07-02",
...
},
{
ID: "112",
REFERENCE_DATE: "2018-07-06",
...
},
...
]
jest.mock("axios")
it("", () => {
axios.get.mockImplementationOnce(() => Promise.resolve({ data: slides }))
const tree = renderer.create(<Carousel />).toJSON()
expect(tree).toMatchSnapshot()
})
снимок только записи null
, поскольку на момент выполнения я предполагаю state.slides = null
.
Не могу понять, как рассчитать ожидания после того, как Axios завершил выборку данных.
В большинстве примеров в сети либо используются ферменты, либо показаны тесты с асинхронными функциями, которые возвращают обещания.Я не мог найти тот, который показал бы пример только с использованием шутки и рендеринга компонента.
Я попытался сделать тестовую функцию async
, также используя обратный вызов done
, но безуспешно.