Skip to content

boneskull/unexpected-eventemitter

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

unexpected-eventemitter

EventEmitter assertions for Unexpected

Installation

$ npm i unexpected unexpected-eventemitter --save-dev
  • This package requires Node.js v14+ or a browser supporting ES6.
  • unexpected v10+ is a peer dependency of this package.
  • In a browser, this module is exposed as globalThis.unexpectedEventEmitter or window.unexpectedEventEmitter.

Example

import unexpected from 'unexpected';
import unexpectedEventEmitter from 'unexpected-eventemitter';
import {EventEmitter} from 'node:events';

const expect = unexpected.clone().use(unexpectedEventEmitter);

const ee = new EventEmitter();

// "to emit from" with sync function
expect(
  () => {
    ee.emit('foo', {bar: 'baz'});
  },
  'to emit from',
  ee,
  'foo',
  {
    bar: 'baz',
  }
); // ok

// "to emit from" with async function
expect(
  async () => {
    await somethingAsync();
    ee.emit('foo', {bar: 'baz'});
  },
  'to emit from',
  ee,
  'foo',
  {
    bar: 'baz',
  }
); // ok

// "to emit from" with Promise
expect(
  somethingAsync().then(() => {
    ee.emit('foo', {bar: 'baz'});
  }),
  'to emit from',
  ee,
  'foo',
  {
    bar: 'baz',
  }
); // ok

// "not to emit from" with async function
expect(
  async () => {
    await somethingAsync();
    ee.emit('foo', {bar: 'baz'});
  },
  'not to emit from',
  ee,
  'foo'
); // assertion failure!

// "to emit with error from"
const err = new Error('uh oh');
expect(
  Promise.resolve().then(() => {
    ee.emit('foo', {bar: 'baz'});
    throw err;
  }),
  'to emit with error from',
  ee,
  'foo',
  err
); // ok

Assertions

to emit from

<function|Promise> [not] to emit from <EventEmitter> <string> <any*>

  • <function|Promise> may be a Promise, async, or synchronous function
  • <EventEmitter> may be a duck-typed Node.js EventEmitter
  • <string> is the event name
  • <any*> corresponds to zero (0) or more values which may be emitted. Do not use an array unless you expect the value to be an array!
  • An EventEmitter emitting more values than expected will not fail an assertion.
  • Values are checked with "to satisfy" for flexibility.

to emit with error from

<function|Promise> to emit with error from <Error> <EventEmitter> <string> <any*>

  • Use when the subject <function|Promise> emits, but also throws or rejects.
  • A strict equality check is made against Error
  • There is no converse of this assertion; you cannot use [not].

Contributing

Please use the Conventional Commits commit message format.

  • unexpected-events: Provides an alternative syntax, with the ability to test multiple events at once

License

©️ 2017 Christopher Hiller. Licensed Apache-2.0.