2017-06-25 1 views
0

J'utilise l'enzyme pour tester mon composant create-react-app, mais cela n'a pas fonctionné intuitivement. Est-ce que je ne comprends pas ce qu'est le rendu superficiel?Pourquoi le rendu superficiel ne fonctionne-t-il pas comme prévu?

import React from "react"; 
import { Card } from "./Card"; 

const TestUser =() => { 
    return (
    <div> 
     <div className="test" /> 
     <div className="wrapper"> 
     <Card /> 
     <Card /> 
     <Card /> 
     </div> 
    </div> 
); 
}; 

export default TestUser; 

.test.js

import React from "react"; 
import TestUser from "./TestUser"; 
import { shallow } from "enzyme"; 
import { Card } from "./Card"; 

it("should render right",() => { 
    const component = shallow(<TestUser />); 
    expect(component.find(Card)).to.have.length(3); 
}); 

Je pense qu'il devrait passer le test, parce que elle a 3 Card composants TestUser

Mais il sortie: TypeError: Impossible de lire la propriété « ont 'de undefined

Comment cela fonctionne-t-il?

Répondre

1

Essayez-le. Vous devez le donner en chaîne littérale. Aussi pour moi la bibliothèque expect que vous utilisez n'est pas celle que vous obtenez de chai et peut avoir un ensemble différent de méthodes auxiliaires, d'où cette erreur. Malheureusement, je n'ai pas le code avec moi pour vérifier plus loin. Rien de mal avec le rendu superficiel du tout.

import React from "react"; 
import TestUser from "./TestUser"; 
import { shallow } from "enzyme"; 
import { expect } from 'chai'; 

it("should render right",() => { 
    const component = shallow(<TestUser />); 
    expect(component.find('Card')).to.have.length(3); 
}); 

vous n'avez pas besoin d'avoir cette déclaration ici, import Card from "./card";

Dans la composante TestUser modifier l'instruction d'importation comme celui-ci.

import Card from "./card"; 

Alors maintenant, votre composant TestUser devrait ressembler à ceci.

import React from "react"; 
import Card from "./card"; 

const TestUser =() => { 
    return (
    <div> 
     <div className="test" /> 
     <div className="wrapper"> 
     <Card /> 
     <Card /> 
     <Card /> 
     </div> 
    </div> 
); 
}; 

export default TestUser; 

Utilisez la commande suivante pour installer la bibliothèque chai.

npm install --save chai 

Si vous voulez vraiment utiliser Jest, changez votre assertion comme ci-dessous.

import React from "react"; 
import TestUser from "./testuser"; 
import { shallow } from "enzyme"; 

it("should render right",() => { 
    const component = shallow(<TestUser />); 
    expect(component.find('Card')).toHaveLength(3); 
}); 

Personnellement, j'aime moka en raison de son API fluide.

Espérons que cela aide. Codage heureux!

+0

J'utilise 'create-react-app'. [enzyme doc] (http://airbnb.io/enzyme/docs/guides/jest.html), je pense que je n'ai pas besoin d'autre chose que «enzyme». Parce que déjà pré-configuré? Ai-je tort? – Liuuil

+0

Il semble qu'ils utilisent jest pour l'assertion: https://facebook.github.io/jest/docs/expect.html#content Vous pouvez éjecter le projet en utilisant 'npm run eject' et ensuite le personnaliser. Ensuite, vous avez plus de pouvoir et de contrôle sur elle. Après cela, vous pouvez installer moka si vous le souhaitez. Je suis un fan de moka. Si vous devez aller avec Jest, vous devrez peut-être faire des recherches et résoudre le problème. –

+0

La réponse a été mise à jour pour inclure Jest. –

-1
it("should render right",() => { 
    const component = shallow(<TestUser />); 
    const element = component.find('wrapper'); 
    chai.expect(element.props.children).to.have.length(3); 
});