Ich habe Probleme mit der Methode contains von Enzyme, wenn es um den onClick-Handler einer Schaltfläche geht, bei dem die angegebene Aktionsmethode ein Argument erfordert. Ich lief in diese, während Reductions Aktionen an eine Komponente übergeben, aber ich werde hier vereinfachte Beispiele verwenden.Fehler beim Testen der Schaltfläche onClick-Handler mit dem Enzym
Sagen Sie zwei Methoden:
const logClick =() => console.log('button was clicked');
const logClickWithArg = (message) => console.log('button was clicked: ', message);
Sie übergeben sie an eine Komponente, und in dieser Komponente haben Sie zwei Tasten:
<button
onClick={logClick}
>
Click
</button>
<button
onClick={() => logClickWithArg('hello')}
>
Click With Arg
</button>
Als ich die erste Taste zu testen, gibt es kein Problem :
expect(wrapper.contains(
<button
onClick={logClick}
>
Click
</button>)).toBe(true);
es passiert. Allerdings ist die zweite:
expect(wrapper.contains(
<button
onClick={() => logClickWithArg('hello')}
>
Click
</button>)).toBe(true);
schlägt mit dem nicht hilfreich Ausgabe:
expect(received).toBe(expected)
Expected value to be (using ===):
true
Received:
false
at Object.<anonymous>.it (src/App.test.js:42:3)
at process._tickCallback (internal/process/next_tick.js:103:7)
Ich habe versucht, mehr zu erfahren, indem sie alle Arten von Vergleichen versuchen, wie:
console.log('first ', wrapper.find('button').first().props().onClick);
console.log('last ', wrapper.find('button').last().props().onClick);
expect(wrapper.find('button').first().props().onClick).toEqual(logClick);
expect(wrapper.find('button').last().props().onClick).toEqual(logClickWithArg);
die Ergebnisse in:
console.log src/App.test.js:29
first () => console.log('button was clicked')
console.log src/App.test.js:30
last () => logClickWithArg('hello')
expect(received).toEqual(expected)
Expected value to equal:
[Function logClickWithArg]
Received:
[Function onClick]
Ich bin uns Jest als Test-Runner, und dies sowohl in der create-react-app- als auch in der react-boilerplate-Konfiguration. Irgendeine Idee, was ich falsch mache?
EDIT
Ich werde meine eigene Abhilfe in einer Antwort unten geben. Ich werde meinen tatsächlichen Code dort anstelle dieser Beispiele verwenden. Ich bin jedoch immer noch neugierig, warum der Test hier fehlschlägt ....
Dieses Thema kann Ihr Problem nicht lösen? http: // Stapelüberlauf.com/questions/35478076/testing-react-component-onclick-event-mit-multiple-actions-in-it –