Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

chai-wait-for

Package Overview
Dependencies
Maintainers
0
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

chai-wait-for

Drop-in replacement for expect that waits for the assertion to succeed (retries on an interval you choose, until a timeout you choose)

  • 2.0.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
0
Created
Source

chai-wait-for

CircleCI Coverage Status semantic-release Commitizen friendly npm version

Drop-in replacement for expect that waits for the assertion to succeed (retries on an interval you choose, until a timeout you choose).

Provides an especially clean syntax for working with some chai plugins like chai-fs, chai-webdriverio-async etc:

await waitFor('#submittedMessage').to.have.text('Your changes have been saved!')

Usage

npm install --save-dev chai-wait-for
// First, use the plugin
const chai = require('chai')
const chaiWaitFor = require('chai-wait-for')
chai.use(chaiWaitFor)

// Then create your `waitFor` with default options:
const waitFor = chaiWaitFor.bindWaitFor({
  // If no assertion attempt succeeds before this time elapses (in milliseconds), the waitFor will fail.
  timeout: 5000,
  // If an assertion attempt fails, it will retry after this amount of time (in milliseconds)
  retryInterval: 100,
})

it('wait for something', async function () {
  this.timeout(10000)

  const myObj = { foo: 0 }

  setInterval(() => myObj.foo++, 1000)

  // Then use it just like you would expect() (but note you must await it!)
  await waitFor(myObj).to.have.property('foo').that.equals(3)

  // You can also use a getter function:
  await waitFor(() => myObj.foo).to.equal(4)

  // If you need to override the defaults:
  await waitFor.timeout(1000)(myObj).to.have.property('foo').that.equals(3)
  await waitFor.retryInterval(500)(myObj).to.have.property('foo').that.equals(3)
})

Plugin usage order/usage with chai-as-promised

All chai language chains that were defined before you use chai-wait-for will be available to use with it.

This is similar to chai-as-promsied, but although you generally need to chai.use(require('chai-as-promised')) after all your other chai plugins, this is actually not the case for chai-wait-for, because chai-wait-for doesn't add or overwrite any language chains. Instead you should use chai-wait-for after chai-as-promised, so that you can waitFor .eventually assertions:

const chai = require('chai')
const chaiWaitFor = require('chai-wait-for')
chai.use(require('chai-as-promised'))
chai.use(chaiWaitFor)

const waitFor = chaiWaitFor.bindWaitFor({ retryInterval: 100, timeout: 5000 })

it('wait for something', async function () {
  // User.findOne returns a promise; use .eventually.not.exist to wait for user to be deleted
  await waitFor(() => User.findOne({ where: { username: 'dude' } })).to
    .eventually.not.exist
})

Keywords

FAQs

Package last updated on 16 Oct 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc