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

eventsourcemock

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eventsourcemock

Mock EventSource in tests.

  • 2.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

eventsourcemock Build Status

A dependency free mock for EventSource objects.

Example (with Jest)

Setup

To setup the mock create a new file where the mock is assigned to the window object.

// __test__/configJSDom.js
import EventSource from 'eventsourcemock';

Object.defineProperty(window, 'EventSource', {
  value: EventSource,
});

Then instruct Jest to use that file during setup in package.json.

"jest": {
  "setupFiles": [
    "./__test__/configJSDom.js"
  ]
}

Usage

Suppose we want to test this component, which updates its state when a message is received from an EventSource instance.

export default class Component extends React.Component {
  props: Props;
  state: State;
  source: $PropertyType<window, 'EventSource'>;

  constructor(props: Props) {
    super(props);
    this.state = {
      counter: 0,
    };
  }

  componentDidMount() {
    this.source = new window.EventSource('http://example.com/events');
    this.source.addEventListener('foo', messageEvent => {
      this.setState({ counter: parseInt(messageEvent.data, 10) });
    });
  }

  componentWillUnmount() {
    this.source.close();
  }

  render() {
    return <div className="Component">{this.state.counter}</div>;
  }
}

We can write a test file that grabs the source from the global sources object and simulates messages:

// @flow
import React from 'react';
import { mount } from 'enzyme';

import Component from './Component';
import { sources } from 'eventsourcemock';

const messageEvent = new MessageEvent('foo', {
  data: '1',
});

describe('update counter on SSE', () => {
  let wrapper;
  beforeAll(() => {
    wrapper = mount(<Component />);
    sources['http://example.com/events'].emitOpen();
  });

  it('should initialise counter to 0', () => {
    expect(wrapper.state('counter')).toBe(0);
  });

  it('should display "0"', () => {
    expect(wrapper.text()).toBe('0');
  });

  it('should update the counter to 1', () => {
    sources['http://example.com/events'].emit(
      messageEvent.type,
      messageEvent
    );
    expect(wrapper.state('counter')).toBe(1);
  });

  it('should close the EventSource on unmount', () => {
    wrapper.unmount();
    expect(sources['http://example.com/events'].readyState).toBe(2);
  });
});

API

sources: { [key: string]: EventSource }

sources holds the EventSource instances created.

import { sources } from 'eventsourcemock';

EventSource

EventSource mocks window.EventSource, providing methods to simulate messages and errors from the network.

import EventSource from 'eventsourcemock';
Constructor
EventSource(
  url: string,
  options?: {
    withCredentials: boolean
  }
)
Properties
__emitter

A reference to the node EventEmitter instance used internally.

onopen

See eventSource.onopen.

onmessage

See eventSource.onmessage.

onerror

See eventSource.onerror.

readyState

See eventSource.readyState.

url

See eventSource.url.

withCredentials

See eventSource.withCredentials.

Methods
emit(eventName: string, messageEvent?: MessageEvent)

Calls each of the listeners registered for the event named eventName, providing messageEvent as argument.

Example

const messageEvent = new MessageEvent('type', {
  data: 'message event data'
});
source.emit(messageEvent.type, messageEvent);
emitOpen()

Simulates the opening of a connection. It sets the ready state to open and invokes the callback.

emitMessage(message: any)

Simulates dispatching of a message, it invokes the onmessage callback.

emitError(error: Error)

Simulates dispatching an error event on the EventSource instance. Causes onerror to be called.

Example (jest)

const onErrorSpy = jest.fn();
const error = new Error('Something went wrong.');
eventSource.onerror = onErrorSpy;
eventSource.emitError(error);
expect(onErrorSpy).toHaveBeenCalledWith(error);
addEventListener(eventName: string, listener: Function)

See EventTarget.addEventListener.

removeEventListener(eventName: string, listener: Function)

See EventTarget.removeEventListener

close()

See EventSource.close.

FAQs

Package last updated on 29 Apr 2018

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