23
votes

Jest / Enzyme ShallowWrapper est vide lors de la création de Snapshot

ItemCard donc un test pour mon composant Item et j'ai essayé de rendre le composant ItemCard , puis d'utiliser ce wrapper pour créer un instantané mais il renvoie un ShallowWrapper {} vide ShallowWrapper {}

Veuillez consulter le code pour plus d'informations:

Item.test.js

// Jest Snapshot v1

exports[`<ItemCard/> renders and matches the snapshot 1`] = `ShallowWrapper {}`;

Le claquement qu'il crée:

import { shallow } from 'enzyme';
import { ItemCard } from '../Item';

const fakeItem = {
  id: 'aksnfj23',
  title: 'Fake Coat',
  price: '40000',
  description: 'This is suuuper fake...',
  image: 'fakecoat.jpg',
  largeImage: 'largefakecoat.jpg',
};

describe('<ItemCard/>', () => {
  it('renders and matches the snapshot', () => {
    const wrapper = shallow(<ItemCard me item={fakeItem} showButtons />);

    // console.log(wrapper.debug());
    expect(wrapper).toMatchSnapshot();
  });
});

Autant que je sache, le ShallowWrapper devrait contenir du contenu au lieu d'être vide.

Quelqu'un peut-il me dire ce que je fais de mal ici?

Merci


2 commentaires

Il semble que la mount au lieu de shallow vous rendra heureux


@Alex Non. Ceci n'est pas lié à mount / shallow.


8 Réponses :


6
votes

J'ai rencontré le même problème après la mise à jour vers jest@24.0.0 Je suis revenu à la version précédente jest@23.6.0 pour le moment jusqu'à ce que je sache ce qui a changé. Si vous trouvez ce qui a changé, postez-le ici.


4 commentaires

C'est tout ... Je viens de le réparer hier en rétrogradant Jest ... c'est bizarre mais maintenant ça marche bien.


déclassé et toujours confronté au même problème


Revenir à Jest 23 complet interrompt Babel si vous êtes sur la version 7 car il tente d'appeler la version 6.


Voir la réponse de Titenis et le problème lié à GitHub.



26
votes

Pour jest v24, vous devez utiliser un sérialiseur d'instantanés comme https://github.com/adriantoine/enzyme-to-json

source: https://github.com/facebook/jest/issues/7802


2 commentaires

Cela ne fonctionne pas pour moi avec jest: 24 , enzyme: 3.9.0 , enzyme-adapter-react-16: 1.11.2 , enzyme-to-json: 3.3.5 . J'ai installé et configuré enzyme-to-json dans package.json mais ShallowWrapper toujours un ShallowWrapper vide dans le code de l'instantané. :( La seule chose qui fonctionne est d'utiliser un vieux react-test-renderer réactif fiable, ce qui n'est pas idéal.


Peut confirmer le travail avec jest: 24.1.0 , enzyme: 3.4.0 , enzyme-adapter-react-16: 1.2.0 , enzyme-to-json: 3.4.0 . Devrait être la réponse acceptée



3
votes

Vous pouvez simplement utiliser la fonction de montage et de débogage comme ceci:

it('Should render Component', () => {
    const wrapper = mount(<Component {...props} />);
    expect(wrapper.debug()).toMatchSnapshot();
  });


2 commentaires

fonctionne également avec Shallow, mais contient juste un composant interne


avez-vous trouvé une solution à cela? Je suis confronté au même problème, il ne contient que innerComponent sans aucun code HTML.



2
votes

utiliser la méthode debug () après le wrapper

  it('renders and matches the snapshot', () => {
const wrapper = shallow(<ItemCard me item={fakeItem} showButtons />);

// console.log(wrapper.debug());
expect(wrapper.debug()).toMatchSnapshot(); });


0 commentaires

6
votes

0 commentaires

2
votes

J'ai rencontré le même problème et résolu en utilisant le sérialiseur https://github.com/adriantoine/enzyme-to-json .

npm install --save-dev enzyme-to-json

Une fois installé l'enzyme-to-json, nous pouvons utiliser quelque chose comme ci-dessous

import React, {Component} from 'react';
import {shallow} from 'enzyme';
import toJson from 'enzyme-to-json';

it('renders correctly', () => {
  const wrapper = shallow(
    <MyComponent className="my-component">
      <strong>Hello World!</strong>
    </MyComponent>,
  );

  expect(toJson(wrapper)).toMatchSnapshot();
});

La même chose peut être résolue en utilisant shallow().debug() mais préférez utiliser la méthode ci-dessus.


1 commentaires

ajoutez également ci-dessous dans les configurations de plaisanterie: "snapshotSerializers": ["enzyme-to-json / serializer"] Il peut être dans le fichier 'package.json' dans l'objet "jest" ou dans le fichier 'jest.config.js'.



18
votes

Il ne devrait pas être nécessaire de revenir à la version. Suite au DOC officiel

Vous devez ajouter ceci à votre configuration Jest :

{
  "name": "my-project",
  "jest": {
    "snapshotSerializers": ["enzyme-to-json/serializer"]
  }
}

indice: pourrait être aussi simple que de l'ajouter à votre package.json , comme:

"snapshotSerializers": ["enzyme-to-json/serializer"]

Désolé si ce n'était pas la réponse. Je viens de voir que personne ne l'a dit ici et cela doit aider d'autres perdants comme moi il y a quelques minutes.


1 commentaires

Vous pouvez définir le même snapshotSerializers: ['enzyme-to-json/serializer'], dans jest.config.js



0
votes

Peut-être un peu tard, mais j'ai réussi à trouver une solution à ce problème en utilisant https://enzymejs.github.io/enzyme/docs/api/ShallowWrapper/getElement.html

describe("Button", () => {
  it("should render basic button correctly", () => {
    const tree = shallow(<Button></Button>);
    expect(tree.getElement()).toMatchSnapshot();
  });
});

ce travail sur Jest 26.5.3 et enzyme 3.10.5


0 commentaires