Skip to content

saltenasl/wix-eventually

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wix-eventually Build Status npm version

Retries promise until timeout expires in a linear fashion with delays defined by interval. Given this module is inteded to be used only within tests it does not provide more robust strategies like retry-as-promised, but instead is designed to be predictable and fit within timeouts defined for your tests.

Uses defaults:

  • timeout: 10s;
  • interval: 200ms;

install

npm install --save-dev wix-eventually

usage

const eventually = require('wix-eventually')
const { expect } = require('chai')

describe('example', () => {

  it('should retry', () => {
    let hasCompleted = false;
  	setTimeout(() => hasCompleted = true, 1000)

  	return Promise.resolve()  	  
  	  .then(() => eventually(() => expect(hasCompleted).to.equal(true))
  })
})

Api

(fn, opts): Promise

Wraps a promise that retries a function n times with 200 ms delay in between;

Arguments:

  • fn - sync function or thenable.
  • opts - optional object with:
    • timeout - timeout for retrying, ms;
    • interval - retry interval, ms.

with(defaults): (fn, opts)

Returns a function with provided defaults - {timeout, interval}.

Note regarding testing

Using this library might cause an anti-pattern of writing tests that take a long time to run. For example, if the code is using setTimeout, it's "easy" to use eventually to check the result. In case the timeout is set for 3 seconds, the test will now take 3 seconds. Instead, the code should be written in such way that the setTimeout functionality can be modified in the test to either run synchronously or with a very short timeout value.

About

Retry promise for async operations in tests

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 59.5%
  • JavaScript 40.5%