Files
cypress/docs/source/api/commands/invoke.md
T
2017-06-01 14:18:22 -04:00

4.5 KiB

title, comments, description
title comments description
invoke true

Invoke a function on the previously yielded subject.

{% note info %} If you want to get a property that is not a function on the previously yielded subject, use .its(). {% endnote %}

Syntax

.invoke(functionName)
.invoke(functionName, args...)

Usage

.invoke() requires being chained off another cy command that yields an object with function properties.

{% fa fa-check-circle green %} Valid Usage

cy.wrap({animate: fn}).invoke('animate') // Invoke the 'animate' function
cy.get('.modal').invoke('show')          // Invoke the jQuery 'show' function

{% fa fa-exclamation-triangle red %} Invalid Usage

cy.invoke('convert')                   // Errors, cannot be chained off 'cy'
cy.wrap({name: 'Jane'}).invoke('name') // Errors, 'name' is not a function

Arguments

{% fa fa-angle-right %} functionName (String)

Name of function to be invoked.

{% fa fa-angle-right %} args...

Additional arguments to be given to the function call. There is no limit to the number of arguments.

Yields

.invoke() yields the return value of the invoked property.

Timeout

Examples

Function

Assert on a function's return value

var fn = function(){
  return 'bar'
}

cy.wrap({foo: fn}).invoke('foo').should('eq', 'bar') // true

Use .invoke() to test HTML content

{% note info %} Check out our example recipe where we use cy.invoke('text') to test against HTML content {% endnote %}

Properties that are functions are invoked

In the example below, we use .invoke() to force a hidden div to be 'display: block' so we can interact with its children elements.

cy.get('div.container').should('be.hidden') // true

  .invoke('show') // call jquery method 'show' on the '.container'
    .should('be.visible') // true
    .find('input').type('Cypress is great')

Use .invoke('show') and .invoke('trigger')

{% note info %} Check out our example recipe where we use cy.invoke('show') and cy.invoke('trigger') to click an element that is only visible on hover {% endnote %}

3rd Party Plugins

Using a Kendo DropDown

Invoke functions available from 3rd party plugins included in your app.

cy.get('input').invoke('getKendoDropDownList').then(function(dropDownList){
  // yields the return of $input.getKendoDropDownList()
  return dropDownList.select('apples')
})

We can rewrite the previous example in a more terse way and add an assertion.

cy
  .get('input')
  .invoke('getKendoDropDownList')
  .invoke('select', 'apples')
  .its('val').should('match', /apples/)

Function with Arguments

Send specific arguments to the function

var fn = function(a, b, c){
  return a + b + c
}

cy
  .wrap({sum: fn})
  .invoke('sum', 2, 4, 6)
    .should('be.gt', 10) // true
    .and('be.lt', 20)    // true

Use cy.invoke('removeAttr', 'target') to get around new tab

{% note info %} Check out our example recipe where we use cy.invoke('removeAttr', 'target') to test clicking on a link without opening in a new tab {% endnote %}

Arguments are automatically forwarded to the function

cy
  .get('img').invoke('attr', 'src')
    .should('include', 'myLogo')

Command Log

Invoke jQuery show method on element

cy.get('.connectors-div').should('be.hidden')
  .invoke('show').should('be.visible')

The commands above will display in the command log as:

screen shot 2017-06-01 at 1 13 44 pm

When clicking on invoke within the command log, the console outputs the following:

screen shot 2017-06-01 at 1 14 00 pm

See also