1.0.3 • Published 1 year ago

jest-sequence v1.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

jest-sequence

npm.io codecov coverage npm TypeScript compatible

Testing sequence

A class perfoms some sync or async actions may looks for example like this:

class Test {
  other() {}
  first(num: number) { return num }
  second(str: string) { return str }

  async main() {
    await quant(1)
    this.first(1)
    this.other()
    await quant(1)
    this.second('test')
  }
}

To be sure that some of methods is called in appropriate order and at appropriate time and with required arguments the test spec may looks like this:

import { sequence, quant, timeout } from 'jest-sequence'

const methodsOfTestToWatch = [
  'main', 'first', 'second'
] as jest.FunctionPropertyNames<Test>[]

describe('test sequence', () => {
  afterEach(() => {
    jest.restoreAllMocks()
  })

  it('match known sequence', async () => {
    const test = new Test()
    const sequence = new Sequence()
    sequence.spyOn(Test.prototype, methodsOfTestToWatch)

    test.main()

    sequence.add(test, 'main', [])
    expect(sequence).toMatchSequence()
  
    await quant(1)
    sequence.add(test, 'first', [1])
    expect(sequence).toMatchSequence()

    await quant(1)
    sequence.add(test, 'second', ['test'])
    expect(sequence).toMatchSequence()
  })
})

The utility function timeout is just promisify setTimeout().

The utility function quant(x) is simple wrapper for timeout(x * quantDuration).

The variable quantDuration by default is 200ms and may be modified via environment variable JEST_SEQUENCE_QUANT.

As of now only one Sequence instance may be instantiated per test case or several instances per test case must not share same methods to spy on.

Methods received() and expected() returns internal representation of received and expected sequnces (received from spy method and added manually) respectively. This methods is just for reference (or debug) - representation of sequences is subject to change.

Method clean() - does empty of received and expected sequences.