【发布时间】:2021-09-28 06:40:19
【问题描述】:
我有一个非常简单的组件,我试图在其中模拟 API 调用以获取一些电影,但会稍有延迟。
我想编写一个测试来测试电影被收集然后渲染到屏幕上。
我正在尝试使用screen.getAllByTestId 来执行此操作,但它总是失败。就好像它没有重新渲染,因此没有得到更新的更改。
我已经在元素上添加了一个 testid,并且可以在 DOM 中看到这些。
谁能帮忙解释一下为什么在他们出现后找不到他们?
这是完整的组件代码...
import './App.css';
import { useEffect, useState } from 'react';
function App() {
const [movies, setMovies] = useState([]);
useEffect(() => {
// simulate API call to get
setTimeout(() => {
const movies = [{ title: 'Titanic' }, { title: 'Back To The Future' }];
setMovies(movies);
}, 1000);
}, []);
return (
<div>
{movies.length > 0 && (
<div>
{movies.map((x) => (
<div data-testid='movies'>{x.title}</div>
))}
</div>
)}
</div>
);
}
export default App;
这是完整的测试代码...
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const movieTiles = screen.getAllByTestId('movies');
expect(movieTiles).toHaveLength(2);
});
这是测试的错误
【问题讨论】:
标签: javascript reactjs testing jestjs react-testing-library