Ich verwende Scherz, um meine Reaktionskomponenten zu testen, und ich verwende expect(...).toBeCalledWith(...);
um zu testen, ob eine Funktion mit bestimmten Parametern aufgerufen wurde und mit Werttypen gut funktioniert.
Das Problem ist, ich möchte eine Funktion testen, die beim Aufrufen ein Objekt als Parameter verwendet expect(myFunc).toBeCalledWith(object);
Der Test schlägt immer fehl, weil die beiden miteinander verglichenen Objekte natürlich nicht die gleiche Referenz haben.
also wie kann ich dieses problem lösen?
ein Beispielcode dessen, was ich zu testen versuche, ist
it('the function should be called with the correct object', () => {
api.submitForm = jest.fn().mockReturnValue(Promise.resolve());
const wrapper = shallow(<component />);
const instance = wrapper.instance();
instance.submitForm();
const object = {
foo : 'foo',
bar: 'bar'
};
// this always fails even the function is called with the same object values
expect(api.submitForm).toBeCalledWith(object);
});
Eine Fehlermeldung würde etwa so aussehen
Expected mock function to have been called with:
[{"bar": "bar", "foo": "foo"}]
But it was called with:
[{"bar": "bar", "foo": "foo"}]
Aktualisieren
Es scheint, dass der folgende Code gut funktioniert
expect(api.submitForm).toBeCalledWith(
expect.objectContaining({
foo : 'foo',
bar: 'bar'
}),
);
Wenn das Objekt jedoch eine Eigenschaft mit Array-Wert enthält, funktioniert die obige Lösung nicht
const obj = {
foo : ['foo1', 'foo2'],
bar: 'bar'
}
Das Problem könnte etwas anderes sein. Ich habe das obige Muster in meinem Code verwendet und es funktioniert wie erwartet
– Pubudu Dodangoda
23. Dezember 2017 um 14:39 Uhr
Erwähnen Sie bitte die Scherzversion …
– Pubudu Dodangoda
23. Dezember 2017 um 14:41 Uhr
Das Scherzdokument selbst hier zeigt, dass sie den Wert vergleichen, nicht die Referenz, facebook.github.io/jest/docs/en/…
– Pubudu Dodangoda
23. Dezember 2017 um 14:50 Uhr
Ich benutze Scherz
20.0.4
und das Problem tritt auf, wenn Sie eine Array-Eigenschaft in Ihrem Objekt haben– Nader Hischam
23. Dezember 2017 um 15:02 Uhr
Die zweite Lösung funktioniert jetzt Ich habe einen Tippfehler in meinem Code entdeckt.
– Nader Hischam
23. Dezember 2017 um 15:06 Uhr