javascript - Test can't find conditional render component, disappearing too quickly - Stack Overflow

I am displaying a loading indicator whilst I wait for an async process to occur, however I believe my t

I am displaying a loading indicator whilst I wait for an async process to occur, however I believe my test might be missing it being displayed because the async process is too quick?

const [isLoading, setIsLoading] = useState(false);

const handleClick = async () => {
  setIsLoading(true); // Show loader when waiting for url to be fetched
  await getAsyncRedirectUrl().then(url => {
    setIsLoading(false); // Hide loader when url fetched
    window.open(url);
  })
}

return (
  <>
    {isLoading && <LoadingIndicator data-testid="loader" />}
    <button onClick={handleClick} data-testid="button">Click me</button>
  </>
)

I have tried to test with the following, to no avail.

it('should show loader', async () => {
  render(<MyComponent />);

  await userEvent.click(screen.queryByTestId('button'));

  await waitFor(() => {
    expect(screen.queryByTestId('loader')).toBeInTheDocument();
  });  
});

The outcome of this test is a failure stating that the loader wasn't found within the DOM.

I added an artificial wait on the function with a setTimeout of 100ms and the test passed. So that would indicate to me that the getAsyncRedirecUrl function is simply finishing too quickly for the test to be able to register the loader as being shown.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745274833a4619973.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信