Comment espionner la fonction des propriétés de la classe de la classe avec Jest

Comment puis-je espionner des propriétés de classe de fonctions de flèche avec Jest? J'ai l'exemple suivant d'un cas de test qui complète l'erreur
Expected mock function to have been called.

:


import React, {Component} from "react";
import {shallow} from "enzyme";

class App extends Component {
onButtonClick = // => {
// Button click logic.
};

render// {
return <button onclick="{this.onButtonClick}"></button>;
}
}

describe/"when button is clicked", // => {
it/"should call onButtonClick", // => {
const app = shallow/<app></app>/;
const onButtonClickSpy = jest.spyOn/app.instance//, "onButtonClick"/;

const button = app.find/"button"/;
button.simulate/"click"/;
expect/onButtonClickSpy/.toHaveBeenCalled//;
}/;
}/;


Je peux faire passer le test en changeant
onClick

prop Boutons sur
// => this.onButtonClick//

, Mais je préférerais ne pas changer votre implémentation de composant uniquement pour les tests.

Y a-t-il un moyen de le faire pour que ce test soit sans modifier la mise en œuvre du composant?
Invité:

Christine

Confirmation de:

Selon
https://github.com/airbnb/enzyme/issues/365
et
https://github.com/airbnb/enzyme/issues/944
, Vous avez deux options:

Option 1: Appeler
wrapper.update//

après
spyOn


Dans votre cas, ce serait:


describe/"when button is clicked", // => {
it/"should call onButtonClick", // => {
const app = shallow/<app></app>/;
const onButtonClickSpy = jest.spyOn/app.instance//, "onButtonClick"/;

// This should do the trick
app.update//;
app.instance//.forceUpdate//;

const button = app.find/"button"/;
button.simulate/"click"/;
expect/onButtonClickSpy/.toHaveBeenCalled//;
}/;
}/;


Option 2: N'utilisez pas la propriété de la classe

Donc, pour vous, vous devrez changer votre composant sur:


class App extends Component {
constructor/props/ {
super/props/;

this.onButtonClick = this.onButtonClick.bind/this/;
}

onButtonClick// {
// Button click logic.
};

render// {
return <button onclick="{this.onButtonClick}"></button>;
}
}

Pour répondre aux questions, connectez-vous ou registre