Nervously Practice Multithreading
    Wondering what’s next for npm?Check out our public roadmap! »

    mocha-rspecstyle

    1.2.0 • Public • Published

    mocha-rspecstyle

    mocha-rspecstyle provides subject and val hooks on mocha like rspec. (New hooks run on beforeEach and afterEach hooks.)

    Usage

    mocha --ui rspecstyle
    

    subject

    const assert = require('assert');
     
    describe('subject sample', () => {
      subject(() => ({ foo: 'abc', bar: 123 }));
     
      it('check subject value', () => {
        assert.deepEqual(subject(), { foo: 'abc', bar: 123 });
      });
     
      context('override subject', () => {
        subject(() => ({ foo: 'abc', baz: false }));
     
        it('check override value', () => {
          assert.deepEqual(subject(), { foo: 'abc', baz: false });
        });
      });
    });

    val

    val is a let of rpsec.

    const assert = require('assert');
     
    describe('val sample', () => {
      val('foo', () => ({ foo: 'commonValue', bar: val('bar')}));
      val('bar', 123);
     
      it('check val value', () => {
        assert.deepEqual(val('foo'), { foo: 'commonValue', bar: 123 });
      });
     
      context('override value', () => {
        val('foo', 'abc');
     
        it('check override value', () => {
          assert.equal(val('foo'), 'abc');
        });
      });
     
      context('override nested value', () => {
        val('bar', () => ({ baz: val('baz') }));
        val('baz', 456);
        
        it('check override value', () => {
          assert.deepEqual(val('foo'), { foo: 'commonValue', bar: { baz: 456 } });
        });
     
        context('re override nested value', () => {
          val('baz', 789);
     
          it('check re override value', () => {
            assert.deepEqual(val('foo'), { foo: 'commonValue', bar: { baz: 789 } });
          });
        });
      });
    });

    sharedExamples/itBehavesLike

    describe('sharedExamples', () => {
      sharedExamples('sharedExamples1', () => {
        it('called shared examples', () => {
          assert(true);
        });
      });
     
      sharedContext('sharedContext1', () => {
        context('context', () => {
          it('called shared context', () => {
            assert(true);
          });
        });
      });
     
      itBehavesLike('sharedExamples1');
      includeContext('sharedContext1');
     
      describe('nested describe', () => {
        includeContext('sharedContext1');
        
        context('nested context', () => {
          itBehavesLike('sharedExamples1');
        });
      });
    });

    Alias

    • sharedExamples ---> sharedContext / shared_examples / shared_context
    • itBehavesLike ---> includeContext / it_behaves_like / include_context

    Full Sample

    (test/lib/feature.js)

    const fizzbuzz = (value) => {
      if (value % 15 === 0) return 'FizzBuzz';
      if (value % 3 === 0) return 'Fizz';
      if (value % 5 === 0) return 'Buzz';
      return `${value}`;
    }
     
    describe('FizzBuzz', () => {
      subject(() => fizzbuzz(val('value')));
     
      sharedExamples('returned Fizz', () => {
        it('return Fizz', () => {
          assert.equal(subject(), 'Fizz');
        });
      });
     
      sharedExamples('returned Buzz', () => {
        it('return Buzz', () => {
          assert.equal(subject(), 'Buzz');
        });
      });
     
      sharedExamples('returned FizzBuzz', () => {
        it('return Buzz', () => {
          assert.equal(subject(), 'FizzBuzz');
        });
      });
     
      sharedExamples('returned value string', () => {
        it('return value string', () => {
          assert.equal(subject(), `${val('value')}`);
        });
      });
     
      sharedContext('FizzBuzz cycle', () => {
        context('1 * cycle', () => {
          itBehavesLike('returned value string', () => val('value', () => 1 * val('cycle')));
        });
        context('2 * cycle', () => {
          itBehavesLike('returned value string', () => val('value', () => 2 * val('cycle')));
        });
        context('3 * cycle', () => {
          itBehavesLike('returned Fizz', () => val('value', () => 3 * val('cycle')));
        });
        context('4 * cycle', () => {
          itBehavesLike('returned value string', () => val('value', () => 4 * val('cycle')));
        });
        context('5 * cycle', () => {
          itBehavesLike('returned Buzz', () => val('value', () => 5 * val('cycle')));
        });
        context('6 * cycle', () => {
          itBehavesLike('returned Fizz', () => val('value', () => 6 * val('cycle')));
        });
        context('7 * cycle', () => {
          itBehavesLike('returned value string', () => val('value', () => 7 * val('cycle')));
        });
        context('8 * cycle', () => {
          itBehavesLike('returned value string', () => val('value', () => 8 * val('cycle')));
        });
        context('9 * cycle', () => {
          itBehavesLike('returned Fizz', () => val('value', () => 9 * val('cycle')));
        });
        context('10 * cycle', () => {
          itBehavesLike('returned Buzz', () => val('value', () => 10 * val('cycle')));
        });
        context('11 * cycle', () => {
          itBehavesLike('returned value string', () => val('value', () => 11 * val('cycle')));
        });
        context('12 * cycle', () => {
          itBehavesLike('returned Fizz', () => val('value', () => 12 * val('cycle')));
        });
        context('13 * cycle', () => {
          itBehavesLike('returned value string', () => val('value', () => 13 * val('cycle')));
        });
        context('14 * cycle', () => {
          itBehavesLike('returned value string', () => val('value', () => 14 * val('cycle')));
        });
        context('15 * cycle', () => {
          itBehavesLike('returned FizzBuzz', () => val('value', () => 15 * val('cycle')));
        });
      });
     
     
      describe('1〜15', () => {
        includeContext('FizzBuzz cycle', () => val('cycle', 1));
      });
      describe('16〜30', () => {
        includeContext('FizzBuzz cycle', () => val('cycle', 2));
      });
    });

    Licence

    MIT

    Install

    npm i mocha-rspecstyle

    DownloadsWeekly Downloads

    7

    Version

    1.2.0

    License

    MIT

    Last publish

    Collaborators

    • avatar