Je veux vérifier qu'une API simulée est appelée avec un objet qui ne contient un champ spécifique.

expect(api.method).toBeCalledWith(expectedObject);

Étant donné que les paramètres réels de l'appel api.method peuvent être un sous-ensemble du expectedObject, ce test réussit également si le actualObject contient d'autres champs (parmi lesquels le champ spécifique pourrait être).

Comment puis-je réécrire le test de manière à ce que les tests échouent si le actualObject n'est pas égal au expectedObject ?

2
ynotu. 14 mars 2019 à 13:16

2 réponses

Meilleure réponse

Vous pouvez essayer quelque chose comme ça

// get the first call to your method
const method = api.method.mock.calls[0]; 

//check if you have expectedObject as a subset of the arguments
expect(method[0]).toMatchObject(expectedObject); 

//key is the field that shouldn't be part of the arguments
expect(method[0].has(key)).toEqual(false); 
4
Karim 6 mai 2020 à 20:46
// since several tests use this mock I have to ensure to have the latest call
const lastMockApiCall = api.method.mock.calls[api.method.mock.calls.length - 1]; 
const apiCallParams = lastMockApiCall[0];
expect(apiCallParams).not.toHaveProperty('specificFieldIdontWant');
1
ynotu. 14 mars 2019 à 15:00