featurist / finished-promise

Synchronous implementation of Promise for use in tests
1 stars 3 forks source link

finished-promise

Synchronous implementation of Promise for use in tests.

Allows testing of asynchronous code in synchronous tests.

Instead of this:

describe('Promise', () => {
  it('finishes asynchronously, so we can only write asynchronous tests for code that uses Promise', () => {
    let result
    Promise.resolve(123).then(resolved => {
      result = resolved
    })
    assert.equal(result, undefined)
    return soon(() => assert.equal(result, 123))
  })
})

We can do this:

describe('FinishedPromise', () => {
  it('finishes synchronously, so we can write synchronous tests when we use it in place of Promise', () => {
    let result
    FinishedPromise.resolve(123).then(resolved => {
      result = resolved
    })
    assert.equal(result, 123)
  })
})

async / await

Overriding global.Promise has no effect on async functions - they will use the native v8 Promise regardless.

To circumvent this limitation we can transpile the source code prior to running it. Babel can do this, although rather slowly, which would defeat the purpose of this library - fast tests!

Instead we can use async-to-gen which is actually very fast. See ./mocha for an example.

We're Hiring!

Featurist provides full stack, feature driven development teams. Want to join us? Check out our career opportunities.