chai-signals

    1.0.2 • Public • Published

    chai-signals Build Status npm version

    Adds chai assertions for the js-signals library.

    Adds the following assertions to chai:

    • dispatched()
    • dispatchedWith()

    How to use

    Installation

    Important: The expectations in this package are dependent on signals from js-signals.

    npm install chai-signals
    

    Create

    First define which signals you're interested in.

    var signal = new signals.Signal();
    var signalSpy = chai.signals.spyOnSignal(signal);
    var signalSpies = chai.signals.createSignalSpyObj([signal1, signal2]);

    Filtering signals

    You can pass a boolean function to specify which dispatches to register.

    var signal = new signals.Signal();
    var signalSpy = chai.signals.spyOnSignal(signal).matching(function (dispatchInfo) {
        return dispatchInfo !== null;
    });
    signal.dispatch();  // ignored
    signal.dispatch(5); // registered

    Expectations

    After defining the spy you can set expectations in your tests.

    expect(signalSpy).to.have.been.dispatched();        // the spy's signal has been dispatched at least once
    expect(signalSpy).to.have.been.dispatched(n);       // the spy's signal has been dispatched n times
    expect(signal).to.have.been.dispatched();           // the signal has been dispatched at least once
    expect(signal).to.have.been.dispatched(n);          // the signal has been dispatched n times
    expect(signalSpy).to.not.have.been.dispatched();    // the spy's signal has not been dispatched at all
    expect(signalSpy).to.not.have.been.dispatched(n);   // the spy's signal has not been dispatched n times
    expect(signal).to.not.have.been.dispatched();       // the signal has not been dispatched at all
    expect(signal).to.not.have.been.dispatched(n);      // the signal has not been dispatched at all
     
    expect(signalSpy).to.have.been.dispatchedWith(n);          // the spy's signal has been dispatched using n
    expect(signalSpy).to.have.been.dispatchedWith(m, n);       // the spy's signal has been dispatched using (m, n)
    expect(signalSpy).to.have.been.dispatchedWith(<object>);   // the spy's signal has been dispatched with using object
    expect(signal).to.have.been.dispatchedWith(n);          // the signal has been dispatched using n
    expect(signal).to.have.been.dispatchedWith(m, n);       // the signal has been dispatched using (m, n)
    expect(signal).to.have.been.dispatchedWith(<object>);   // the signal has been dispatched with using object
    expect(signalSpy).to.not.have.been.dispatchedWith(n);          // the spy's signal has not been dispatched using n
    expect(signalSpy).to.not.have.been.dispatchedWith(m, n);       // the spy's signal has not been dispatched using (m, n)
    expect(signalSpy).to.not.have.been.dispatchedWith(<object>);   // the spy's signal has not been dispatched with using object
    expect(signal).to.not.have.been.dispatchedWith(n);          // the signal has not been dispatched using n
    expect(signal).to.not.have.been.dispatchedWith(m, n);       // the signal has not been dispatched using (m, n)
    expect(signal).to.not.have.been.dispatchedWith(<object>);   // the signal has not been dispatched with using object

    AMD

    It's possible to use chai-signals as an AMD (Asynchronous Module Definition) module.

    chai-signals depends on JS-Signals, so first define signals path:

    require.config({
        paths: {
            signals: 'components/js-signals/signals',
            chai-signals: 'components/chai-signals/lib/chai-signals'
        }
    });

    Then use it in Chai tests like this:

    define(['myClass', 'chaiSignals'], function(myClass, chaiSignals) {
        it('should signal completed', function () {
            chai.signals.spyOnSignal(myClass.completed);
     
            myClass.doSomething();
     
            expect(myClass.completed).to.have.been.dispatched();
        });
    });

    If you are using karma to run tests make sure to include chai.use(chaiSignals); in each of your test files.

    Examples

    See tests for usage:

    chai-signals.test.js

    Development

    Install node.js, bower.

    npm install
    bower install
    npm test

    License

    This code is distributed under the MIT license.

    Credit

    This plugin is based off of Adam Nowotny's jasmine-signals.

    Install

    npm i chai-signals

    DownloadsWeekly Downloads

    5

    Version

    1.0.2

    License

    MIT

    Last publish

    Collaborators

    • stephendavidson