javascript - Hvorfor rendres ikke barnekomponenten når jeg tester med React Testing Library?


Jeg skriver UI-enhetstester ved å bruke Jest/Testing Library.

Jeg har en DashboardLayout-komponent som returnerer

return (
    <DashboardLayoutRoot sx={{ marginTop: '30px' }}>
      <DashboardNavbar
        onSidebarMobileOpen={(): void => setIsSidebarMobileOpen(true)}
      />
      <DashboardSidebar
        onMobileClose={(): void => setIsSidebarMobileOpen(false)}
        openMobile={isSidebarMobileOpen}
      />
      <DashboardLayoutWrapper>
        <DashboardLayoutContainer>
          <DashboardLayoutContent>{children}</DashboardLayoutContent>
        </DashboardLayoutContainer>
      </DashboardLayoutWrapper>
    </DashboardLayoutRoot>
  );

DashbordNavigasjonslinje :

<DashboardNavbarRoot {...other}>
      <Toolbar sx={{ minHeight: 64 }}>
        <Hidden lgUp>
          <IconButton color="inherit" onClick={onSidebarMobileOpen}>
            <MenuIcon fontSize="small" data-testid="sidebar-icon" />
          </IconButton>
        </Hidden>

Som du kan se, satte jeg testid i MenuIcon.

Men når man renderer i test, feiler getByTestId.

// skip setup above

render(
    <Provider store={store}>
      <DashboardLayout />
    </Provider>,
  );
 const sidebarIcon = screen.getByTestId('sidebar-icon');

  expect(sidebarIcon).toBeVisible();

Jeg setter opp alt korrekt, som test-ruter, Provider osv.

Hvorfor skjer dette?

Bør jeg bare rendre DashboardNavbar for seg selv? (ikke sikker på om dette ville være en god enhetstest for UI, though)

Svar #1

Du kan trenge å mocke barnekomponenten og teste for den mockede komponenten

// skip setup above
jest.mock('./MenuIcon', () => ({ MenuIcon : () => 'mocked menu icon' }));

const container = render(
    <Provider store={store}>
      <DashboardLayout />
    </Provider>,
  );
 

  expect(container).toMatchInlineSnapshot(`
      <div>
        mocked menu icon
      </div>
    `);