De toute ma vie, je ne peux pas faire en sorte que Jest / Enzyme joue bien avec des composants stylisés.
J'ai un composant que je monte qui filtre une liste de 5 des expéditions les plus récentes.
const LastFiveShipments = ({shipments}) => {
return (
<StyledList>
<h5>Last Five Shipments:</h5>
{
shipments.sort((a, b) => new Date(a.cargo_units[0].created_at) - new Date(b.cargo_units[0].created_at))
.filter((shipment, index) => index < 5)
.map((shipment, index) => <li key={index}>{shipment.reference}</li> )
}
</StyledList>
)
}
const StyledList = styled.ul`
padding: 1em;
margin: 0 10px;
background: #f0f0f0;
border-radius: 10px;
border: 1px solid #14374e;
margin: 1em 0;
& li {
text-align: center;
}
`;
it("should have five shipments", () => {
const wrapper = shallow(<LastFiveShipments shipments={dummyProps.shipments} />);
wrapper.debug();
const styledList = wrapper.find("styled.ul");
expect(styledList).exists().to.equal(true);;
})
styled.ul est le nom d'affichage et find n'a pas de chance de le sélectionner. p>
3 Réponses :
Vous pouvez importer le composant que vous recherchez, dans ce cas StyledList , et l'utiliser à la place de "styled.ul"
import StyledList from '' wrapper.find(StyledList)
C'est un ul stylé à l'intérieur d'un composant.
Vous pouvez exporter le composant stylisé afin qu'il puisse être importé et utilisé pour .find dans vos tests
@Donovan m'a battu.
Quoi qu'il en soit, j'ai pu reproduire le même problème, cependant, il existe deux solutions de contournement:
shallow , vous pouvez monter le composant puis affirmer: expect (wrapper.find ("StyledComponent> ul")). toHaveLength ( 1); . monter le composant, vous pouvez importer StyledList de 'path / to / styledList'; puis affirmer: expect (wrapper.find ( StyledList)). ToHaveLength (1) Exemple de travail :
Vous pouvez également renommer votre composant stylisé pour le rendre plus facile à lire. Par exemple
expect(wrapper.find('ul')).toHaveLength(1)
test.js
const StyledList = styled.ul`
padding: 1em;
margin: 0 10px;
background: #f0f0f0;
border-radius: 10px;
border: 1px solid #14374e;
margin: 1em 0;
& li {
text-align: center;
}
`;
StyledList.displayName = 'ul';
De cette façon, vous n'avez pas besoin d'importer votre composant stylisé