背景
我正在创建我的测试套件,并将 sinon 用于存根和 chai 作为断言框架。
要将两者结合起来,我使用的是sinon-chai。
客观的
我想确保使用正确的参数调用我的存根。为此,我必须遵循以下行:
expect(myStub).to.be.calledWith(jsonObj);
我正在使用的 json 对象如下:
{
"info": [
{
"amenities": {
"air": true,
"heating": true,
"pets": true,
"pool": false,
"terrace": false,
"wifi": true
},
"apartmentName": {
"br": "Incrível apartamento. No centro da cidade",
"de": "Umfangreiche Wohnung in Mitte. In Barcelona",
"en": "Central apartment. Simply charming!",
"es": "Gran apartamento en buena zona ¡Genial!",
"fr": "Totalement imposant! Près de toutes les attractions de Barcelone",
"it": "Straordinario appartamento con aria condizionata, a Barcellona",
"nl": "Welkom bij Barcelona! Comfortabel appartement"
},
"bedrooms": 2,
"city": 1,
"cityName": {
"en": "Barcelona",
"it": "Barcellona"
},
"coordinates": {
"lat": 38.7223,
"lng": -9.1393
},
"id": 17,
"mfc": 150,
"numReviews": 0,
"partnerId": 23,
"partnerName": "Booking.com",
"photo": "http://images.friendlyrentals.com/FR_imgs/Property_4089/PrImg_4089_1_lg.jpg",
"photos": [
22174376,
22174377,
22174378,
22174379,
22174380
],
"rating": 0,
"ref": 4089,
"sameApartments": [
630534,
3136848
],
"sleeps": 5,
"sqm": 95
},
{
"amenities": {
"air": true,
"heating": true,
"pets": true,
"pool": false,
"terrace": false,
"wifi": false
},
"apartmentName": {
"br": "Incrível apartamento. No centro da cidade",
"de": "Umfangreiche Wohnung in Mitte. In Barcelona",
"en": "Central apartment. Simply charming!",
"es": "Gran apartamento en buena zona ¡Genial!",
"fr": "Totalement imposant! Près de toutes les attractions de Barcelone",
"it": "Straordinario appartamento con aria condizionata, a Barcellona",
"nl": "Welkom bij Barcelona! Comfortabel appartement"
},
"bedrooms": 2,
"city": 1,
"cityName": {
"en": "Barcelona",
"it": "Barcellona"
},
"coordinates": {
"lat": 38.7223,
"lng": -9.1393
},
"id": 19,
"mfc": 150,
"numReviews": 0,
"partnerId": 1,
"partnerName": "FriendlyRentals",
"photo": "http://images.friendlyrentals.com/FR_imgs/Property_4089/PrImg_4089_1_lg.jpg",
"photos": [
22174376,
22174377,
22174378,
22174379,
22174380
],
"rating": 4,
"ref": 4089,
"sameApartments": [
61414
],
"sleeps": 5,
"sqm": 95
}
],
"requestId": "kjdhsabkdhbvashdfv"
}
问题
通过使用http://www.jsondiff.com/,我知道我收到的对象和我正在比较的对象是同一个 JSON 对象。
但是无论我做什么,测试总是失败,好像两个对象不同。
为了解决这个问题,我尝试使用chai-json-equal但它也失败了。
到目前为止,唯一的解决方案是callsFake
在我的存根上使用,通过手动将 JSON 转换为 Javascript 对象JSON.parse
,然后进行比较。这样测试就通过了,但是当我应该能够开始比较两个 JSON 对象时,这个解决方案很糟糕。
我还检查了 sinon-chai 文档,没有任何特殊的方法可以比较 JSON 对象。
问题
- 是否可以使用 sinonChai 来比较 JSON 对象?如果是,我该怎么做?
- 如何使用 sinon 和 chai 比较 JSON 对象?