2016-08-11 8 views
-1

ich einen API-Aufruf mache, die eine JSON-Struktur in der Antwort zurückgibt:erwarteten Bedingungen mit JSON-Objekte

{ 
"tags": [], 
"scope": "all", 
"tenant_id": "0",  
"version": 1, 
"type": "tenant", 
"description": "", 
"name": "3", 
"body":{ 
    "settings": {}, 
    "tenant_id": "2",  
} 
} 

Als ich

expect(res.body.name).toBe(3); 

oder

expect(res.body.name).toEqual(3); 
zu vergleichen versuche

Es schlägt fehl und gibt folgenden Fehler:

Expected '3' to be 3. 

oder

Expected '3' to Equal 3. 
+0

@Suresh hat die richtige Antwort, wenn Sie überprüfen müssen, können Sie immer 'console.log (typeof (res.body.name))', die in Ihrem Fall 'string' zurückgeben würde – Gunderson

+0

Dank dieser Hilfe' Konsole .log (typeof (res.body.name)) 'gibt den String zurück und verwendet' toContain() 'und es hat funktioniert. – ssharma

Antwort

4

Sie gleich String '3' Nummer 3, das ist der Grund für das Scheitern. Sie können den folgenden Code verwenden:

expect(res.body.name).toEqual("3"); 

ODER

expect(res.body.name).toBe("3"); 
+0

Versucht dies, aber das scheitert auch: 'Erwartet '3' bis '3'.' – ssharma

+0

Können Sie die console.log (typeof res.body.name) ?, so dass wir den Code basierend auf res aktualisieren können. body.name type –

+0

@soniasharma Es scheint, dass Ihre Ausgabe wörtlich "3" ist. Das heißt, es ist nicht nur die String-Darstellung von 3, sondern die String-Darstellung von einem Tick, 3 und Tick. Deshalb funktioniert '.toContain' für Sie. Vielleicht, wenn Sie wollten, könnten Sie versuchen: 'expect (res.body.name) .toEqual ('\' 3 \ '');' oder 'expect (res.body.name) .toEqual ('' 3 '"); 'Es hängt alles von Ihren Bedürfnissen ab. – Machtyn

1

"name": "3", macht es klingen, als ob expect(res.body.name).toEqual('3'); sollte, da "3" arbeiten, ist eine Zeichenfolge.

Auch in der gleichen Ader:
expect(res.body.name).toBe('3'); falls Ihr Code-Stil vorzieht === Kontrollen über ==
expect(Number(res.body.name)).toEqual(3); falls Sie brauchen, um die Anzahl erwarten 3 unabhängig von der genauen Art der 3.

Wenn die API-Antwort war, würden Ihre Tests gut sein, aber es scheint, als ob die Implementierung es als String gespeichert hat. Sie können entweder einen Fehler melden, wenn es sich um eine Zahl handelt, oder Sie haben die Erwartung, dass es sich um Strings handelt, oder konvertieren Sie die API-Antwort vor dem Aktivieren in eine Zahl.

Ich glaube nicht, dass Sie buchstäblich '3', nur 3 die Zeichenfolge anstelle von 3 die Zahl erwarten müssen.