3
votes

Comment tester l'absence de propriétés JSON (potentiellement) imbriquées dans Postman?

Je veux tester l'absence de la propriété imbriquée "x"

Le test doit échouer si, la réponse ressemble à ceci

A:

pm.test("(nested)property 'x' not available", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.second.three).to.not.have.property("x")
});


3 commentaires

Pouvez-vous utiliser l'une des fonctions Lodash pour décomposer davantage les données, plutôt que d'essayer de tout faire dans l'instruction pm.expect () . La fonction _.get () peut être utile lodash.com/docs /4.17.11#get


@DannyDainton: Merci pour ce super indice. C'est exactement ce que je recherche. Veuillez copier le contenu de votre commentaire en tant que réponse dans le fil de discussion afin que je puisse l'accepter.


Il serait bon de voir votre solution finale à cette question pour aider d'autres personnes à comprendre comment vous l'avez utilisée pour atteindre votre objectif.


3 Réponses :


0
votes

Ce n'est pas exactement ce que vous recherchez mais j'espère que cela pourra être utile pour toute personne intéressée.

Commencez par stringifier le JSON dans une chaîne, puis recherchez le mot-clé avec ses guillemets doubles pour rechercher précisément le mot exact (la propriété dont il s'agit).

Bien sûr, il ne s'agit que d'un concept mais je pense que cela peut être une option pour vous d'essayer si tout le reste échoue.

Il y a des possibilités d'amélioration, je vois. Alors, n'hésitez pas à l'ajuster si nécessaire.

const cases = [{
    "first": 1,
    "second": {
      "one": 1,
      "two": 2,
      "three": {
        "x": 1,
        "y": 2
      }
    }
  },
  {
    "first": 1,
    "second": {
      "one": 1,
      "two": 2,
      "three": {
        "y": 2
      }
    }
  },
  {
    "first": 1,
    "second": {
      "one": 1,
      "two": 2
    }
  },
  {
    "first": 1,
    "example": "notx"
  }
]
const property = "x" // Property that you are looking for its absence
cases.forEach(c => {
  console.log(JSON.stringify(c).includes('"' + property + '"'))
  // True = property is present | False = property is absent
})


0 commentaires

1
votes

Vous pouvez utiliser les fonctions intégrées Lodash pour décomposer davantage les données, plutôt que d'essayer de tout faire dans l'instruction pm.expect ().

La fonction _.get () peut être utile pour explorer cela avec - https://lodash.com/docs/4.17.11#get


0 commentaires

0
votes

Ma solution finale:

var a = {
    "first": 1,
    "second": {
        "one": 1,
        "two": 2,
        "three": {
            "x": 1,
            "y": 2
        }
    }
};

var b = {
    "first": 1,
    "second": {
        "one": 1,
        "two": 2,
        "three": {
            "y": 2
        }
    }
};

var c = {
    "first": 1,
    "second": {
        "one": 1,
        "two": 2
    }
};

var d = {
    "first": 1
};


pm.test("(nested)property 'x' NOT available in 'a'", function () { //must fail for a
    var jsonData = a;
    pm.expect(_.get(jsonData, "second.three.x", undefined)).to.be.undefined;
});

pm.test("(nested)property 'x' NOT available in 'b'", function () {
    var jsonData = b;
    pm.expect(_.get(jsonData, "second.three.x", undefined)).to.be.undefined;
});

pm.test("(nested)property 'x' NOT available in 'c'", function () {
    var jsonData = c;
    pm.expect(_.get(jsonData, "second.three.x", undefined)).to.be.undefined;
});

pm.test("(nested)property 'x' NOT available in 'd'", function () {
    var jsonData = d;
    pm.expect(_.get(jsonData, "second.three.x", undefined)).to.be.undefined;
});


0 commentaires