# wix-eventually

> retrying execution of function for tests

Latest version **2.3.0** (published 2020-02-17) · ISC license · 0 weekly downloads

## Install

```sh
npm install wix-eventually
pnpm add wix-eventually
yarn add wix-eventually
bun add wix-eventually
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.3.0 |
| Published | 2020-02-17 |
| First published | 2017-12-18 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=6 |
| Dependencies | 1 |
| Unpacked size | 12 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Vilius Lukosius |
| Maintainers | viliusl |

## Links

- npm: https://www.npmjs.com/package/wix-eventually
- Repository: https://github.com/wix/wix-eventually
- Issues: https://github.com/wix/wix-eventually/issues
- npm.io page: https://npm.io/package/wix-eventually

## Dependencies (1)

- [trier-promise](https://npm.io/package/trier-promise.md) ~1.0.1

## Recent versions

- 2.3.0 (latest) — 2020-02-17
- 2.2.0 — 2018-02-13
- 2.1.0 — 2017-12-18
- 2.0.1 — 2017-12-18
- 2.0.0 — 2017-12-18

## README

# wix-eventually [![Build Status](https://travis-ci.org/wix/wix-eventually.svg?branch=master)](https://travis-ci.org/wix/wix-eventually) [![npm version](https://badge.fury.io/js/wix-eventually.svg)](https://badge.fury.io/js/wix-eventually)

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](https://www.npmjs.com/package/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

```bash
npm install --save-dev wix-eventually
```

## usage

```js
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.

---
_Source: https://npm.io/package/wix-eventually · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
