0.0.3 • Published 4 years ago

@blueday-technology/cypress-plugin-signalr v0.0.3

Weekly downloads
15
License
ISC
Repository
github
Last release
4 years ago

Table of Contents

  1. Install
  2. Introduction
  3. Get started
  4. Usage

Install with npm:

npm install --save-dev cypress-plugin-signalr

Install with yarn:

yarn add cypress-plugin-signalr --dev

cypress-plugin-signalr is a plugin for cypress that provides a mock for the SignalR hub connection and adds cypress commands to publish (hubPublish) and/or verify (hubVerify) actions from and to your SignalR hub.

After installing the package include an import in the cypress/support/index.js file, like:

import 'cypress-plugin-signalr';

The plugin exposes the SignalRMock on the global object as 'signalrMock'; You can decide for yourself how to use this object in your app but in most cases you probably want to pass it to your application, for example on the window object, like:

Cypress.Commands.overwrite('visit', (originalFn, url) => {
  return originalFn(url, {
    onBeforeLoad(window) {
      window.signalrMock = signalrMock;
    },
  });
});

In your app you have to take this object and use it when defined, like:

const connection = window.signalrMock || new signalR.HubConnectionBuilder()
    .withUrl(hubUrl)
    .build();

Within cypress you now have three new commands: 1. hubPublish This command publishes the specified action with the specified attribute, like:

  it('should publish an action', () => {
    cy
      .hubPublish('notification:receive', 'My notification');
  });

This will execute the code in registered subscribers, like:

    connection.on('notification:receive', (message) => {
      console.log(message); // logs: 'My notification'
    });
  1. hubVerify This command verifies that a specific message is invoked, like:
  it('should invoke an action', () => {
    cy
      .hubVerify('DeleteNotification', 1, (invokes) => {
        expect(invokes[0].args[0]).to.equal(123);
      });
  });

As you can see it provides you with the invocations occurred for this action. An action is invoked with SignalR like:

   connection.invoke('DeleteNotification', 123);
  1. hubClear This command clears the current state of the mock. this is most likely used to clear invocations between tests. You can call this command after each test, like:
  afterEach(() => {
      cy
        .hubClear();
  });

Optionally you can specify whether you want to clear both the invokes as the subscribers, like:

  afterEach(() => {
      cy
        .hubClear({
            subscribers: false,
            invokes: true, // default
         });
  });
  1. InvocationReply Pass variable signalRInvocationResults to window. The variable is in json form: eg
 {
   "DeleteNotification": "here is the reply"
 }

How to use in Cypress

  cy.fixture("signalRInvocationResults/standard.json").then((jsonObj) => {
    window.signalRInvocationResults = jsonObj;
    cy.log(
      "signalRInvocationResults saved to Cypress window global variable to be used by 'cypress-plugin-signalr'."
    );
    cy.visit(url, {
      mockSignalR: true,
    });
  });