J'ai écrit un bouton personnalisé ( MyStyledButton) basé sur material-ui Button .
import React from "react";
import { Button } from "@material-ui/core";
import { makeStyles } from "@material-ui/styles";
const useStyles = makeStyles({
  root: {
    minWidth: 100
  }
});
function MyStyledButton(props) {
  const buttonStyle = useStyles(props);
  const { children, width, ...others } = props;
  return (
      <Button classes={{ root: buttonStyle.root }} {...others}>
        {children}
      </Button>
     );
}
export default MyStyledButton;
Il est stylisé à l'aide d'un thème, ce qui spécifie qu'il backgroundColordoit être une nuance de jaune (spécialement #fbb900)
import { createMuiTheme } from "@material-ui/core/styles";
export const myYellow = "#FBB900";
export const theme = createMuiTheme({
  overrides: {
    MuiButton: {
      containedPrimary: {
        color: "black",
        backgroundColor: myYellow
      }
    }
  }
});
Le composant est instancié dans mon principal index.jset enveloppé dans le theme.
  <MuiThemeProvider theme={theme}>
     <MyStyledButton variant="contained" color="primary">
       Primary Click Me
     </MyStyledButton>
  </MuiThemeProvider>
Si j'examine le bouton dans Chrome DevTools, il background-colorest "calculé" comme prévu. C'est également le cas dans Firefox DevTools.
Cependant, lorsque j'écris un test JEST pour vérifier le background-coloret que je recherche le style de nœud DOM du bouton à l'aide du bouton getComputedStyles()Je transparentreviens et le test échoue.
const wrapper = mount(
    <MyStyledButton variant="contained" color="primary">
      Primary
    </MyStyledButton>
  );
  const foundButton = wrapper.find("button");
  expect(foundButton).toHaveLength(1);
  //I want to check the background colour of the button here
  //I've tried getComputedStyle() but it returns 'transparent' instead of #FBB900
  expect(
    window
      .getComputedStyle(foundButton.getDOMNode())
      .getPropertyValue("background-color")
  ).toEqual(myYellow);
J'ai inclus un CodeSandbox avec le problème exact, le code minimum à reproduire et l'échec du test JEST.
themebesoin ne serait-il pas utilisé dans le test? Comme dans, enveloppez le <MyStyledButton>dans le <MuiThemeProvider theme={theme}>? Ou utiliser une fonction wrapper pour ajouter le thème à tous les composants?
                