web-dev-qa-db-fra.com

Jest Test "Les valeurs comparées n'ont aucune différence visuelle."

Je fais une comparaison entre deux objets qui sont assez complexes et j'essaie d'utiliser la méthode .toEqual dans expect.

Voici mon test:

it('check if stepGroups data in controlData matches data in liveData', () =>    {
    var controlStore = data.controlStore
    var liveStore
    return getData().then(result => {
        liveStore = new Store()
        liveStore.loadData(JSON.parse(result))
        expect(controlStore).toEqual(liveStore)  
    })
})

J'ai fait une différence entre la sortie attendue et la sortie reçue et les deux semblent être les mêmes. Qu'est-ce qui entraînerait toujours l'échec de ce test? Je lisais sur un joli format ( https://github.com/facebook/jest/issues/1622 ). Avez-vous rencontré des situations similaires?

22
Stefan H.

utilisez expect(JSON.stringify(controlStrore)).toEqual(JSON.stringify(liveStore))

20
user2584621

Dans votre exemple de code, vous comparez deux instances de Store, qui encapsulent certaines données. Ainsi, même si les données (result json dans votre cas) sont identiques, cela n'implique pas nécessairement que les deux instances de conteneur peuvent être considérées comme égales.

Il devrait être possible de faire quelque chose comme expect(controlStore.getState()).toEqual(liveStore.getState()).

12
eur00t

Vous essayez probablement de définir une méthode via une fonction lambda dans votre classe Store. Donc, jest essaie de comparer les différentes fonctions, qui ont été générées séparément à chaque fois que vous faites new Store(). En conséquence, il augmente une erreur, bien qu'il ne puisse pas afficher la différence, il ne peut pas imprimer les fonctions.

Je ne recommanderais pas d'utiliser JSON.stringify car cela pourrait masquer un problème sous-jacent. D'après mon expérience, cette erreur se produit principalement lorsqu'un tableau reçoit une clé qui n'est pas un nombre. Exemple:

  const arr = [1]
  arr.a = 'b'
  expect(arr).toEqual([1])

Le test échoue avec l'erreur Compared values have no visual difference. Pour comprendre ce qui se passe, je recommande de consigner l'objet, puis d'adapter le scénario de test si nécessaire.

console.log(arr)
// logs [ 1, a: 'b' ]
0
Clemens