J'utilise jest pour tester mes composants react et j'utilise expect(...).toBeCalledWith(...);
pour tester si une fonction a été appelée avec des paramètres spécifiques, et cela fonctionne très bien avec les types de valeur.
Le problème est que je veux tester une fonction qui prend un objet en paramètre, donc lorsque vous appelez expect(myFunc).toBeCalledWith(object);
le test échoue toujours car bien sûr les deux objets comparés n'ont pas la même référence.
alors comment puis-je résoudre ce problème?
un exemple de code de ce que j'essaie de tester est
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);
});
Un message d'erreur ressemblerait à ceci
Expected mock function to have been called with:
[{"bar": "bar", "foo": "foo"}]
But it was called with:
[{"bar": "bar", "foo": "foo"}]
il semble que le code ci-dessous fonctionne bien
expect(api.submitForm).toBeCalledWith(
expect.objectContaining({
foo : 'foo',
bar: 'bar'
}),
);
cependant, si l'objet contient une propriété avec une valeur de tableau, la solution ci-dessus ne fonctionne pas
const obj = {
foo : ['foo1', 'foo2'],
bar: 'bar'
}
Regarder le doc jest ( https://facebook.github.io/jest/docs/en/expect.html#expectobjectcontainingobject ). Il semble que vous puissiez faire quelque chose comme ceci:
expect(api.submitForm).toBeCalledWith(
expect.objectContaining({
foo : 'foo',
bar: 'bar'
}),
);