How do I test JSON schema in postman using tv4?

srayner picture srayner · Jan 4, 2018 · Viewed 9.5k times · Source

This is what i am trying, but it always passes the test even for bad results.

pm.test("Schema is valid", function () {
    var data = pm.response.json();
    var schema = {
        ...
        my schema
        ...
    };
    tv4.validate(data, schema);
});

Answer

Justin Finkelstein picture Justin Finkelstein · Jan 24, 2018

The reason this doesn't work is (in short) that the underlying library used by Postman (tv4) is no longer maintained. Having come across the problem earlier today, I found a solution:

tv4.validate(data, schema, false, true)

The latter two parameters are checkRecursive and banUnknownProperties. Setting these two flags as shown above make the validation work as expected.

You may also find this code snippet useful, which reports any validation errors via the console:

pm.test("Response body is valid", function() {
  var data = JSON.parse(responseBody);
  var valid = tv4.validate(data, schema, false, true);
  if (valid !== true) {
      console.log(tv4.error);
  }
  pm.expect(valid).to.be.true;
});