I’m trying to do something that seems to be a little more complicated than I thought.
Here’s the thing. For a specific request, sometimes my response body will contain : "playerReference":"+33123456789"
and sometimes, not. I’m not saying that sometimes “playerReference” is null, but it is simply NOT in the response body. And I want to create a condition on wether or not “playerReference” exists and I can’t
I tried something like that
if(pm.expect(jsonData.playerReference).to.be.an('undefined') === true) {
console.log("there is no player reference");
}
else
{
console.log("there is a player reference");
}
Or even
if(pm.expect(pm.response.text()).to.include('playerReference') === true) {
console.log("there is player reference");
}
else
{
console.log("there is no player reference");
}
I really don’t understand why the last one doesn’t work.
Postman documentation is usually really helpful on this topic. However, I’m struggling to find a proper solution to my problem, here.
Any ideas ?
[RESOLVED]
I changed my condition to simple javascript and now it’s working
if(pm.response.text().includes('playerReference') === true) {
console.log("there is a player reference");
}
else
{
console.log("there is no player reference");
}
I’m about to leave work, so I’ve only skim-read your post - sorry if this isn’t what you want.
But you could use the “hasOwnProperty” method.
if(pm.response.json().hasOwnProperty("playerReference") {
console.log("The property is there!");
} else {
console.log("The property isn't there :(");
}
I always test for properties/values like this:
const body = pm.response.json();
// The below will fail and give us a helpful failure message if "playerReference" is NOT present
// And it'll also give us a helpful failure message if the value of "playerReference" is NOT "123"
pm.test("Property is there", function() {
pm.expect(body).to.have.property("playerReference", "123");
});
In my case, hasOwnProperty doesn’t seem to work. It returns me false even though the property is there…
Anyway, I found a workaround using pm.response.text() and .includes()
Thank you
EDIT:
Actually it is working. I did a test with a property that was inside another property, hence the error.
“loginInformation”: {
“session”: “99456489” }
If I do hasOwnProperty(“loginInformation”), I’ve got true. However, if I do hasOwnProperty(“session”), I’ve got false
Yep, that’s because the “session” property, is inside the “loginInformation” object.
So if you did:
const body = pm.response.json();
body.hasOwnProperty("loginInformation");
// This will output true
body.hasOwnProperty("session");
// This will output false as we're only looking at the top-level of the response, any nested objects won't return true.
body.loginInformation.hasOwnProperty("session");
// This will now output true