Testing Recipes
  • Introduction
  • Cypress
    • How to navigate to a particular path
    • How to get hold of the currently focused element
    • How to confirm an element has a specific class
    • How to run just one of several tests
    • How to get hold of a specific element
    • How to type into an input field
    • How to confirm text value of input field
    • How to confirm list has expected number of items
    • How to stub a GET network request
    • How to wait for XHR response
    • How to create a single command from multiple commands
    • How to stub a POST network request
    • How to test for XHR failures
    • How to interact with hidden elements
    • How to create aliases for DOM elements
    • How to create a data-driven approach to testing
    • What are the different ways in which Cypress can be run
  • Jest
    • How can I test if a function was called?
    • How can I test if a curried function was called?
  • Architecture
    • How can I make my tests more declarative?
    • How can I make my tests more readable?
    • How can I speed up the writing of tests?
  • Enzyme
    • How can I set and get state in my component?
    • How can I simulate a click on a rendered component?
    • How can I simulate a change to an input field?
    • How can I check if a sub-component was rendered?
    • How can I invoke a method on my component?
    • How can I check to see if an event handler was invoked?
    • How can I set props and update a rendered component?
    • How can I mock the global window object in a test?
    • How can I mock functions used by the component I want to test?
  • Jasmine Recipes
    • How can I create a simple test suite?
    • What sort of matchers can I use on my expect calls?
    • How can I run code before and after each it block?
    • How can I mark tests as not having been implemented yet?
    • How can I spy on a method to check that it was called properly?
    • How can I test asynchronous code?
Powered by GitBook
On this page

Was this helpful?

  1. Jasmine Recipes

How can I spy on a method to check that it was called properly?

// A spy can stub a function i.e. return a specific value and track what values it was invoked with.
// A spy only exists in the `it` or `describe` block it was defined in. 
// They are automatically removed after the `it` block has completed.
//
// When you spy on an existing function use `spyOn`

const add = (x, y) => x + y

describe('the add function', () => {
  it('should add two numbers correctly', () => {

    // Spy on the `add` function in the global namespace
    // NOTE: we use `callThrough` to ensure original behaviour of function happens
    const addSpy = spyOn(window, 'add').and.callThrough()

    // Invoke the spy
    const result = add(1, 2)

    // Check it was called correctly
    expect(addSpy.calls.any()).toBe(true)
    expect(addSpy.calls.count()).toBe(1)
    expect(addSpy).toHaveBeenCalled()

    // Check it was called with the correct arguments
    expect(addSpy).toHaveBeenCalledWith(1, 2)

    // Check it returned the correct value
    expect(result).toBe(3)

  })  
})
PreviousHow can I mark tests as not having been implemented yet?NextHow can I test asynchronous code?

Last updated 5 years ago

Was this helpful?