Get a property's value on the previously yielded subject.
If you want to call a
functionon the previously yielded subject, use.invoke().
.its(propertyName)
.its(propertyName, options)
Correct Usage
cy.wrap({ width: '50' }).its('width') // Get the 'width' property
cy.window().its('sessionStorage') // Get the 'sessionStorage' property
Incorrect Usage
cy.its('window') // Errors, cannot be chained off 'cy'
cy.clearCookies().its('length') // Errors, 'clearCookies' does not yield Object
propertyName (String, Number)
Index, name of property or name of nested properties (with dot notation) to get.
options (Object)
Pass in an options object to change the default behavior of .its().
| Option | Default | Description |
|---|---|---|
log |
true |
Displays the command in the Command log |
timeout |
defaultCommandTimeout |
Time to wait for .its() to resolve before timing out
|
.its() 'yields the value of the property' cy.wrap({ age: 52 }).its('age').should('eq', 52) // true
cy.wrap(['Wai Yan', 'Yu']).its(1).should('eq', 'Yu') // true
length property of a DOM elementcy.get('ul li') // this yields us a jquery object
.its('length') // calls 'length' property returning that value
.should('be.gt', 2) // ensure the length is greater than 2
user object of the response's body
cy
.request(...)
.its('body.user')
.then(user => ...)
alternatively, use destructuring
cy
.request(...)
.its('body')
.then(({user}) => ...)
length of titlecy.title().its('length').should('eq', 24)
const fn = () => {
return 42
}
cy.wrap({ getNum: fn }).its('getNum').should('be.a', 'function')
You can access functions to then drill into their own properties instead of invoking them.
// Your app code
// a basic Factory constructor
const Factory = (arg) => {
// ...
}
Factory.create = (arg) => {
return new Factory(arg)
}
// assign it to the window
window.Factory = Factory
cy.window() // yields window object
.its('Factory') // yields Factory function
.invoke('create', 'arg') // now invoke properties on it
.its() to test window.fetch
Check out our example recipe on testing
window.fetchusing.its()
You can drill into nested properties by using dot notation.
const user = {
contacts: {
work: {
name: 'Kamil',
},
},
}
cy.wrap(user).its('contacts.work.name').should('eq', 'Kamil') // true
window
cy.window()
.its('globalProp')
.then((globalProp) => {
// do something now that window.globalProp exists
})
window
cy.window().its('evilProp').should('not.exist')
.its() requires being chained off a previous command. .its() will automatically retry until it has a property that is not null or undefined . .its() can time out waiting for the property to exist. .its() can time out waiting for assertions you've added to pass. Get responseBody of aliased route
cy.intercept('/comments', { fixture: 'comments.json' }).as('getComments')
cy.get('#fetch-comments').click()
cy.wait('@getComments')
.its('response.body')
.should(
'deep.eq',
JSON.stringify([
{ id: 1, comment: 'hi' },
{ id: 2, comment: 'there' },
])
)
The commands above will display in the Command Log as:
When clicking on its within the command log, the console outputs the following:
| Version | Changes |
|---|---|
| 3.8.0 | Added support for options argument |
| 3.7.0 | Added support for arguments of type Number for propertyName
|
© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/its