How can I test asynchronous code?

describe('how to test function with setTimeout', () => {
  let sample = null
  beforeEach(() => {
    sample = jasmine.createSpy('sampleFunction')
    jasmine.clock().install()
  })
  afterEach(() => {
    jasmine.clock().uninstall()
  })
  it('is only invoked after 1000 milliseconds', () => {
    setTimeout(sample, 1000)
    jasmine.clock.tick(999)
    expect(sample).not.toHaveBeenCalled()
    jasmine.clock.tick(1)
    expect(sample).toHaveBeenCalled()
  })
})
describe('how to test function with setInterval', () => {
  let dummy = null
  beforeEach(() => {
    dummy = jasmine.createSpy('dummy')
    jasmine.clock().install()
  })
  afterEach(() => {
    jasmine.clock().uninstall()      
  })    
  it('checks to see number of times function is called', () => {
    setInterval(dummy, 1000)
    jasmine.clock().tick(999)
    expect(dummy.calls.count()).toBe(0)
    jasmine.clock().tick(1000)
    expect(dummy.calls.count()).toBe(1)
    jasmine.clock().tick(1)
    expect(dummy.calls.count()).toBe(2)
  })
})

Last updated

Was this helpful?