Как сравнить само имя объекта (ключи) тела JSON? - PullRequest
1 голос
/ 08 мая 2019

Я очень плохо знаком с Почтальоном.Я хочу сравнить отклик объекта тела JSON.

json_response = JSON.parse(responseBody);
x=json_response.counter
pm.expect(x).to.equal("400");

Это дает мне 400 значений этого соответствующего 'счетчика' (или '400' значения ключа 'counter')

Но я бынравится сравнивать «счетчик» с «счетчиком» сам.(например, Counter, CounTer и т. д.)

{

    "counter": 400,
    "validInMinutes": 660,
    "currentCounter": 322,

}

В основном, я хочу проверить, что все полученные JSON-ключи равны тому, что я ищу!Есть ли простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

У вас есть особая схема, которую вы хотите проверить.(например, Обязательные поля, Типы и т. д.) Другой возможный способ - проверить по предопределенной JSON-схеме:

//Schema definition (can be available as a global var)
var schema = {
    "type": "object",
    "properties": {
        "counter": {
            "type": "number"
        },
        "validInMinutes": {
            "type": "number"
        },
        "currentCounter": {
            "type": "number"
        }
    },
    "required": ["counter", "validInMinutes", "currentCounter"]
};

//Test
pm.test('Schema is valid', function() {
    var jsonData = pm.response.json();
    pm.expect(tv4.validate(jsonData, schema)).to.be.true;
});

Линия "required": ["counter", "validInMinutes", "currentCounter"] - это именно то, что вы должны определить, какие свойства должныбудь там.Но вы также можете определить более строгие правила, например, "должен иметь тип Numer" или должен иметь ровно 3 цифры и т. Д.

1 голос
/ 08 мая 2019

Почтальон pm.expect использует библиотеку Чай для утверждений (это ссылка на pm.cookies, но запись для pm.expect находится под этим заголовком, по некоторым причинам). Используя API Chai , вы можете проверить, что ответ only содержит ключи, которые вы ожидаете, сказав expect(someObject).to.have.keys(expectedKeys) и определить, какими должны быть ключи:

//for convenience - in Postman, these would be readily available. 
var pm = { 
  expect: chai.expect, 
  response: {
    json: function() {
      // the response you would get
      return { "counter": 400, "validInMinutes": 660, "currentCounter": 322 };
    }
  }
};

/* --- test script begins --- */

var expectedKeys = ["counter", "validInMinutes", "currentCounter"];

pm.expect(pm.response.json()).to.have.keys(expectedKeys); // OK
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>

И вот несколько примеров того, как это ожидание может потерпеть неудачу:

var pm = { 
  expect: chai.expect, 
  response: {
    json: function() {
      // "Counter" starts with capital C
      return { "Counter": 400, "validInMinutes": 660, "currentCounter": 322 };
    }
  }
};

/* --- test script begins --- */

var expectedKeys = ["counter", "validInMinutes", "currentCounter"];

pm.expect(pm.response.json()).to.have.keys(expectedKeys); // fails
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>

var pm = { 
  expect: chai.expect, 
  response: {
    json: function() {
      // "counter" is missing
      return { "validInMinutes": 660, "currentCounter": 322 };
    }
  }
};

/* --- test script begins --- */

var expectedKeys = ["counter", "validInMinutes", "currentCounter"];

pm.expect(pm.response.json()).to.have.keys(expectedKeys); // fails
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>

var pm = { 
  expect: chai.expect, 
  response: {
    json: function() {
      //same object you have...
      return { "counter": 400, "validInMinutes": 660, "currentCounter": 322 };
    }
  }
};

/* --- test script begins --- */

//...but there is an extra expected key
var expectedKeys = ["counter", "validInMinutes", "currentCounter", "otherKey"];

pm.expect(pm.response.json()).to.have.keys(expectedKeys); // fails
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script>
...