## Tests

### Writing tests

    describe('A suite', () => {
      it('works', () => {
        expect(true).toBe(true)
      })
    })

Note: This cheatsheet may be a little outdated. Also see the Jest cheatsheet. Jest uses Jasmine, and therefore has similar API.

### Expectations

    expect(true).toBe(true)
    expect(true).not.toBe(true)

    expect(a).toEqual(bar)

    expect(message).toMatch(/bar/)
    expect(message).toMatch('bar')

    expect(a.foo).toBeDefined()
    expect(a.foo).toBeUndefined()
    expect(a.foo).toBeNull()

    expect(a.foo).toBeTruthy()
    expect(a.foo).toBeFalsy()

    expect(message).toContain('hello')

    expect(pi).toBeGreaterThan(3)
    expect(pi).toBeLessThan(4)
    expect(pi).toBeCloseTo(3.1415, 0.1)

    expect(func).toThrow()

### Hooks

    beforeEach(() => {
      ···
    })

    afterEach(() => {
      ···
    })

### Pending

    xit('this is a pending test', () => {
      ···
    })

    xdescribe('this is a pending block', () => {
      ···
    })

### Spies

    spyOn(foo, 'setBar')
    spyOn(foo, 'setBar').andReturn(123)
    spyOn(foo, 'getBar').andCallFake(function() { return 1001; })
    foo.setBar(123)

    expect(foo.setBar).toHaveBeenCalled()
    expect(foo.setBar).toHaveBeenCalledWith(123)
    expect(foo.setBar.calls.length).toEqual(2)
    expect(foo.setBar.calls[0].args[0]).toEqual(123)

### Creating spies

    stub = jasmine.createSpy('stub')
    stub('hello')

    expect(stub.identity).toEqual('stub')
    expect(stub).toHaveBeenCalled()

### Async

    test('works with promises', () => {
      return new Promise((resolve, reject) => {
        ···
      })
    })

Make your test return a promise.

### HTML runner

    var jasmineEnv = jasmine.getEnv()
    jasmineEnv.updateInterval = 250

    var htmlReporter = new jasmine.HtmlReporter()
    jasmineEnv.addReporter(htmlReporter)

    $(function() { jasmineEnv.execute() })

## Jasmine jQuery

### Expectations

    expect($('#id')).toBe('div')
    expect($('input[type=checkbox]')).toBeChecked()
    expect($('input[type=checkbox]')).toBeDisabled()
    expect($('input[type=checkbox]')).toBeFocused()
    expect($('#menu ul')).toBeEmpty()

    expect($('#toolbar')).toBeHidden()
    expect($('#toolbar')).toBeVisible()

    expect($('#popup')).toHaveCss({ margin: "10px" })
    expect($('option')).toBeSelected()

    expect($('.foo')).toExist()

    expect($('a')).toHaveAttr('rel')
    expect($('a')).toHaveAttr('rel', 'nofollow')

    expect($('a')).toHaveClass('rel')
    expect($('a')).toHaveId('home')

    expect($('a')).toHaveHtml('<span></span>')
    expect($('a')).toContainHtml('<span></span>')
    expect($('a')).toHaveText('hi')

    expect($form).toHandle('submit') // event
    expect($form).toHandleWith('submit', onSumbit)

See: jasmine-jquery

### Event spies

    spyOnEvent($('#some_element'), 'click')
    $('#some_element').click()
    expect('click').toHaveBeenPreventedOn($('#some_element'))
    expect('click').toHaveBeenTriggeredOn($('#some_element'))

## References

- Also see the Jest cheatsheet. Jest uses Jasmine, and therefore has similar API.
- https://jasmine.github.io

0 Comments for this cheatsheet. Write yours!