Skip to content

boneskull/unexpected-eventemitter

Repository files navigation

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.

Related Projects

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

License

©️ 2017 Christopher Hiller. Licensed Apache-2.0.