2016-08-11 9 views
-1

は私が応答でJSON構造を返すAPI呼び出しを作っていますオブジェクト:私は期待条件が

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

または

expect(res.body.name).toEqual(3); 
を比較しようとしています

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

失敗し、次のエラーが発生する:

Expected '3' to be 3. 

または

Expected '3' to Equal 3. 
+0

@Sureshが正しい答えを持っているかどうかを再確認する必要がある場合は、 'console.log(typeof(res.body.name))'を実行して、 'string'を返すことができます。 – Gunderson

+0

.log(typeof(res.body.name)) 'は文字列を返しますので、' toContain() 'が使われていました。 – ssharma

答えて

4

あなたは、文字列 '3' 3番までを等化しているが、それが失敗した理由です。

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

OR

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

これを試してみましたが、これも失敗します: '3' ''と等しい '3' ''。 ' – ssharma

+0

resに基づいてコードを更新できるようにconsole.log(typeof res.body.name)?を出力できますか? body.name type –

+0

@soniasharmaあなたの出力は文字通り「3」です。つまり、それは3の文字列表現ではなく、tick、3、およびtickの文字列表現です。そういうわけで、「.toコンテナ」はあなたのために働くのです。おそらく、もしあなたが望むなら、 'expect(res.body.name).toEqual( '\' 3 \ '');'または 'expect(res.body.name).toEqual(" '3' " ); 'それはあなたの必要に応じて決まります。 – Machtyn

1

"name": "3", "3" が文字列であるため、expect(res.body.name).toEqual('3');が動作するはずかのようにそれが聞こえる:あなたは、次のコードを使用することができます。同じ静脈でも


expect(res.body.name).toBe('3');あなたのコードのスタイルは、あなたは関係なく、3

の正確な種類の数3を期待する必要がある場合には==
expect(Number(res.body.name)).toEqual(3);上===チェックを好む場合には

APIレスポンスが"name": 3,の場合、テストはそのままですが、実装に文字列として格納されているようです。数値にする必要がある場合はバグを報告するか、文字列を期待するか、アサインする前にAPI応答を数値に変換してください。

私はあなたが文字通り'3'を期待する必要はないと思っていますが、3よりもむしろ3の数字だけです。

関連する問題