mocha-rspecstyle
v1.2.0
Published
Syntax on mocha like rspec framework
Downloads
12
Readme
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