Skip to content

Synchronous implementation of Promise for use in tests

Notifications You must be signed in to change notification settings

featurist/finished-promise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Synchronous implementation of Promise for use in tests

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •