Bird
Raised Fist0
Postmantesting~3 mins

Why Nested object assertions in Postman? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

Discover how to instantly find hidden details in complex data without the headache!

The Scenario

Imagine you have a big box filled with smaller boxes, and each smaller box has many items inside. You want to check if a specific item is in the right smaller box. Doing this by opening each box and looking manually is tiring and confusing.

The Problem

Manually checking each nested box means lots of time spent opening and closing boxes. You can easily miss an item or make mistakes because it's hard to keep track of where you looked. It's slow and frustrating.

The Solution

Nested object assertions let you write clear checks that go straight to the exact item inside the smaller boxes. This saves time and avoids mistakes by automatically verifying the right details deep inside complex data.

Before vs After
✗ Before
let data = pm.response.json();
if(data.user && data.user.address && data.user.address.city === 'NY') {
  console.log('City is NY');
}
✓ After
pm.expect(pm.response.json()).to.have.nested.property('user.address.city', 'NY');
What It Enables

It enables fast, accurate checks deep inside complex data structures with simple, readable code.

Real Life Example

When testing an online store API, you can quickly verify a customer's shipping city inside their profile without digging through all the details manually.

Key Takeaways

Manual checks of nested data are slow and error-prone.

Nested object assertions simplify and speed up deep data verification.

This makes tests clearer, faster, and more reliable.

Practice

(1/5)
1. In Postman, how do you access a nested property user.name in a JSON response for assertion?
easy
A. Use pm.expect(jsonData.user[name]) to access nested property.
B. Use pm.expect(jsonData.user.name) to assert the nested value.
C. Use pm.expect(jsonData['user-name']) to access nested property.
D. Use pm.expect(jsonData.user-name) to access nested property.

Solution

  1. Step 1: Understand JSON nested property access

    In JavaScript, nested properties are accessed using dot notation like object.property.
  2. Step 2: Apply correct syntax in Postman test

    To assert user.name, use pm.expect(jsonData.user.name) which correctly accesses the nested value.
  3. Final Answer:

    Use pm.expect(jsonData.user.name) to assert the nested value. -> Option B
  4. Quick Check:

    Dot notation = pm.expect(jsonData.user.name) [OK]
Hint: Use dot notation for nested JSON properties in assertions [OK]
Common Mistakes:
  • Using brackets incorrectly for nested keys
  • Using hyphens instead of dots for nested access
  • Missing quotes around string keys in bracket notation
2. Which of the following is the correct syntax to assert that response.body.data.user.age equals 30 in Postman?
easy
A. pm.test('Age is 30', () => { pm.expect(response.body.data.user.age).to.eql(30); });
B. pm.test('Age is 30', () => { pm.expect(response.body.data.user.age).to.equal('30'); });
C. pm.test('Age is 30', () => { pm.expect(response.body.data.user.age).to.be('30'); });
D. pm.test('Age is 30', () => { pm.expect(response.body.data.user.age).equals(30); });

Solution

  1. Step 1: Identify correct assertion method

    Postman uses Chai assertion library where to.eql(value) checks deep equality including numbers.
  2. Step 2: Check syntax correctness

    pm.test('Age is 30', () => { pm.expect(response.body.data.user.age).to.eql(30); }); uses to.eql(30) with correct arrow function and property access, matching expected number type.
  3. Final Answer:

    pm.test('Age is 30', () => { pm.expect(response.body.data.user.age).to.eql(30); }); -> Option A
  4. Quick Check:

    Use to.eql for value equality in Postman tests [OK]
Hint: Use to.eql() for exact value matching in Postman assertions [OK]
Common Mistakes:
  • Using string '30' instead of number 30
  • Using incorrect assertion methods like to.be()
  • Missing arrow function syntax in pm.test
3. Given the JSON response:
{"order": {"id": 101, "items": [{"name": "Pen", "qty": 3}, {"name": "Book", "qty": 2}]}}

What will this Postman test output?
pm.test('Check first item qty', () => {
  const jsonData = pm.response.json();
  pm.expect(jsonData.order.items[0].qty).to.eql(3);
});
medium
A. Test will pass because first item's qty is 3.
B. Test will fail because qty is 2 for first item.
C. Test will throw an error due to wrong index access.
D. Test will fail because items is not an array.

Solution

  1. Step 1: Analyze JSON structure and access

    The JSON has an array items with first element having qty: 3.
  2. Step 2: Check assertion correctness

    The test accesses items[0].qty and asserts it equals 3, which matches the JSON data.
  3. Final Answer:

    Test will pass because first item's qty is 3. -> Option A
  4. Quick Check:

    Array index 0 qty = 3 matches assertion [OK]
Hint: Check array index and property value carefully in nested assertions [OK]
Common Mistakes:
  • Confusing array index starting at 1 instead of 0
  • Assuming items is an object, not an array
  • Misreading qty values in nested objects
4. You wrote this Postman test:
pm.test('Check user city', () => {
  const jsonData = pm.response.json();
  pm.expect(jsonData.user.address.city).to.eql('New York');
});

But the test fails with error: TypeError: Cannot read property 'city' of undefined. What is the likely cause?
medium
A. The assertion method to.eql is incorrect for strings.
B. The city value is misspelled in the assertion.
C. The JSON response is not parsed correctly with pm.response.json().
D. The address property is missing or undefined in user.

Solution

  1. Step 1: Understand the error message

    The error says Cannot read property 'city' of undefined, meaning address is undefined.
  2. Step 2: Identify cause in nested access

    If jsonData.user.address is missing, trying to access .city causes this error.
  3. Final Answer:

    The address property is missing or undefined in user. -> Option D
  4. Quick Check:

    Undefined parent property causes TypeError in nested access [OK]
Hint: Check if all parent nested objects exist before accessing child [OK]
Common Mistakes:
  • Assuming all nested keys always exist
  • Ignoring error message details
  • Blaming assertion method instead of data structure
5. You receive this JSON response:
{"users": [{"id": 1, "profile": {"name": "Alice", "active": true}}, {"id": 2, "profile": {"name": "Bob", "active": false}}]}

Write a Postman test to assert that all users have a profile.active property set to true. Which code snippet correctly performs this nested object assertion?
hard
A. pm.test('All users active', () => { const users = pm.response.json().users; pm.expect(users[0].every(user => user.profile.active)).to.eql(true); });
B. pm.test('All users active', () => { const users = pm.response.json().users; pm.expect(users.profile.active).to.eql(true); });
C. pm.test('All users active', () => { const users = pm.response.json().users; users.forEach(user => { pm.expect(user.profile.active).to.eql(true); }); });
D. pm.test('All users active', () => { const users = pm.response.json().users; users.map(user => pm.expect(user.profile).to.eql(true)); });

Solution

  1. Step 1: Understand requirement to check all users' active status

    We must assert each user's profile.active is true.
  2. Step 2: Evaluate each option's approach

    pm.test('All users active', () => { const users = pm.response.json().users; users.forEach(user => { pm.expect(user.profile.active).to.eql(true); }); }); loops over users and asserts each profile.active equals true, which is correct and clear.
    pm.test('All users active', () => { const users = pm.response.json().users; pm.expect(users.profile.active).to.eql(true); }); wrongly tries to access users.profile.active which is invalid.
    pm.test('All users active', () => { const users = pm.response.json().users; pm.expect(users[0].every(user => user.profile.active)).to.eql(true); }); wrongly calls every() on users[0] (an object), causing TypeError as objects have no every method.
    pm.test('All users active', () => { const users = pm.response.json().users; users.map(user => pm.expect(user.profile).to.eql(true)); }); asserts user.profile equals true, but profile is an object not equal to true and misses .active.
  3. Final Answer:

    Use forEach loop to assert each user's profile.active is true. -> Option C
  4. Quick Check:

    Loop and assert each nested property for all items [OK]
Hint: Use forEach to assert nested properties on all array items [OK]
Common Mistakes:
  • Accessing nested property on array directly
  • Calling array methods like every() on single objects
  • Asserting entire object equals true instead of its boolean property
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard