Skip to main content
The res object available inside the vars, assertions, scripting, and testing contexts can be invoked as a function to query nested response data. Think of it as lodash.get() on steroids.
res('order.total')
Response query filtering (including [?] with filter functions and object predicates) works in both Safe Mode and Developer Mode.

Examples

const data = {
  customer: {
    address: {
      city: "bangalore"
    },
    orders: [
      {
        id: "order-1",
        items: [
          { id: 1, amount: 10 },
          { id: 2, amount: 20 }
        ]
      },
      {
        id: "order-2",
        items: [
          { id: 3, amount: 30 },
          { id: 4, amount: 40 }
        ]
      }
    ]
  },
};
QueryOutput
res(“customer.address.city”)bangalore
res(“customer.orders.items.amount”)[10, 20, 30, 40]
res(“customer.orders.items.amount[0]“)10
res(“..items.amount”)[10, 20, 30, 40]
res(“..amount”)[10, 20, 30, 40]
res(“..items.amount[0]“)10
res(“..items[0].amount”)10
res(“..items[5].amount”)undefined
res(“..id”)[“order-1”, 1, 2, “order-2”, 3, 4]
res(“customer.orders.foo”)undefined
res(“..customer.foo”)undefined
res(“..address”)[{ city: “bangalore” }]
res(“..address[0]”){ city: “bangalore” }

API

Standard dot notation

res('customer.orders.items.amount')

Deep navigation with double dots

res('..items.amount')

Array indexing

res('..items[0].amount')

Array filtering with a filter function

Use [?] with a corresponding filter function to select matching items.
res('..items[?].amount', i => i.amount > 20)

Array filtering with an object predicate

Use [?] with an object to match items by property values. This is equivalent to i => i.id === 2 && i.amount === 20.
res('..items[?]', { id: 2, amount: 20 })

Array mapping with a mapper function

Use [?] with a function that returns a transformed value to map over items.
res('..items..amount[?]', amt => amt + 10)