wix-eventually

2.3.0 • Public • Published

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', async () => {
    let hasCompleted = false
    setTimeout(() => (hasCompleted = true), 1000)
 
    await 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.

Readme

Keywords

none

Package Sidebar

Install

npm i wix-eventually

Weekly Downloads

2,082

Version

2.3.0

License

ISC

Unpacked Size

12.3 kB

Total Files

5

Last publish

Collaborators

  • viliusl