Novices Performing Miracles
Have ideas to improve npm?Join in the discussion! »

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

1

Version

1.2.0

License

MIT

Last publish

Collaborators

  • avatar