diff options
Diffstat (limited to 'tests/lib/mocha-3.1.2/test/suite.spec.js')
-rw-r--r-- | tests/lib/mocha-3.1.2/test/suite.spec.js | 440 |
1 files changed, 440 insertions, 0 deletions
diff --git a/tests/lib/mocha-3.1.2/test/suite.spec.js b/tests/lib/mocha-3.1.2/test/suite.spec.js new file mode 100644 index 0000000000..4cb62dd290 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/suite.spec.js @@ -0,0 +1,440 @@ +'use strict'; + +var mocha = require('../'); +var Suite = mocha.Suite; +var Test = mocha.Test; + +describe('Suite', function () { + describe('.clone()', function () { + beforeEach(function () { + this.suite = new Suite('To be cloned'); + this.suite._timeout = 3043; + this.suite._slow = 101; + this.suite._bail = true; + this.suite.suites.push(1); + this.suite.tests.push('hello'); + this.suite._beforeEach.push(2); + this.suite._beforeAll.push(3); + this.suite._afterEach.push(4); + this.suite._afterAll.push(5); + }); + + it('should copy the title', function () { + this.suite.clone().title.should.equal('To be cloned'); + }); + + it('should copy the timeout value', function () { + this.suite.clone().timeout().should.equal(3043); + }); + + it('should copy the slow value', function () { + this.suite.clone().slow().should.equal(101); + }); + + it('should copy the bail value', function () { + this.suite.clone().bail().should.be.true(); + }); + + it('should not copy the values from the suites array', function () { + this.suite.clone().suites.should.be.empty(); + }); + + it('should not copy the values from the tests array', function () { + this.suite.clone().tests.should.be.empty(); + }); + + it('should not copy the values from the _beforeEach array', function () { + this.suite.clone()._beforeEach.should.be.empty(); + }); + + it('should not copy the values from the _beforeAll array', function () { + this.suite.clone()._beforeAll.should.be.empty(); + }); + + it('should not copy the values from the _afterEach array', function () { + this.suite.clone()._afterEach.should.be.empty(); + }); + + it('should not copy the values from the _afterAll array', function () { + this.suite.clone()._afterAll.should.be.empty(); + }); + }); + + describe('.timeout()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('when no argument is passed', function () { + it('should return the timeout value', function () { + this.suite.timeout().should.equal(2000); + }); + }); + + describe('when argument is passed', function () { + it('should return the Suite object', function () { + var newSuite = this.suite.timeout(5000); + newSuite.timeout().should.equal(5000); + }); + }); + }); + + describe('.slow()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('when given a string', function () { + it('should parse it', function () { + this.suite.slow('5 seconds'); + this.suite.slow().should.equal(5000); + }); + }); + + describe('when no argument is passed', function () { + it('should return the slow value', function () { + this.suite.slow().should.equal(75); + }); + }); + + describe('when argument is passed', function () { + it('should return the Suite object', function () { + var newSuite = this.suite.slow(5000); + newSuite.slow().should.equal(5000); + }); + }); + }); + + describe('.bail()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + this.suite._bail = true; + }); + + describe('when no argument is passed', function () { + it('should return the bail value', function () { + this.suite.bail().should.be.true(); + }); + }); + + describe('when argument is passed', function () { + it('should return the Suite object', function () { + var newSuite = this.suite.bail(false); + newSuite.bail().should.be.false(); + }); + }); + }); + + describe('.beforeAll()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('wraps the passed in function in a Hook', function () { + it('adds it to _beforeAll', function () { + var fn = function () {}; + this.suite.beforeAll(fn); + + this.suite._beforeAll.should.have.length(1); + var beforeAllItem = this.suite._beforeAll[0]; + beforeAllItem.title.should.match(/^"before all" hook/); + beforeAllItem.fn.should.equal(fn); + }); + + it('appends title to hook', function () { + var fn = function () {}; + this.suite.beforeAll('test', fn); + + this.suite._beforeAll.should.have.length(1); + var beforeAllItem = this.suite._beforeAll[0]; + beforeAllItem.title.should.equal('"before all" hook: test'); + beforeAllItem.fn.should.equal(fn); + + function namedFn () {} + this.suite.beforeAll(namedFn); + this.suite._beforeAll.should.have.length(2); + beforeAllItem = this.suite._beforeAll[1]; + beforeAllItem.title.should.equal('"before all" hook: namedFn'); + beforeAllItem.fn.should.equal(namedFn); + }); + }); + }); + + describe('.afterAll()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('wraps the passed in function in a Hook', function () { + it('adds it to _afterAll', function () { + var fn = function () {}; + this.suite.afterAll(fn); + + this.suite._afterAll.should.have.length(1); + var afterAllItem = this.suite._afterAll[0]; + afterAllItem.title.should.match(/^"after all" hook/); + afterAllItem.fn.should.equal(fn); + }); + it('appends title to hook', function () { + var fn = function () {}; + this.suite.afterAll('test', fn); + + this.suite._afterAll.should.have.length(1); + var beforeAllItem = this.suite._afterAll[0]; + beforeAllItem.title.should.equal('"after all" hook: test'); + beforeAllItem.fn.should.equal(fn); + + function namedFn () {} + this.suite.afterAll(namedFn); + this.suite._afterAll.should.have.length(2); + beforeAllItem = this.suite._afterAll[1]; + beforeAllItem.title.should.equal('"after all" hook: namedFn'); + beforeAllItem.fn.should.equal(namedFn); + }); + }); + }); + + describe('.beforeEach()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('wraps the passed in function in a Hook', function () { + it('adds it to _beforeEach', function () { + var fn = function () {}; + this.suite.beforeEach(fn); + + this.suite._beforeEach.should.have.length(1); + var beforeEachItem = this.suite._beforeEach[0]; + beforeEachItem.title.should.match(/^"before each" hook/); + beforeEachItem.fn.should.equal(fn); + }); + + it('appends title to hook', function () { + var fn = function () {}; + this.suite.beforeEach('test', fn); + + this.suite._beforeEach.should.have.length(1); + var beforeAllItem = this.suite._beforeEach[0]; + beforeAllItem.title.should.equal('"before each" hook: test'); + beforeAllItem.fn.should.equal(fn); + + function namedFn () {} + this.suite.beforeEach(namedFn); + this.suite._beforeEach.should.have.length(2); + beforeAllItem = this.suite._beforeEach[1]; + beforeAllItem.title.should.equal('"before each" hook: namedFn'); + beforeAllItem.fn.should.equal(namedFn); + }); + }); + }); + + describe('.afterEach()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('wraps the passed in function in a Hook', function () { + it('adds it to _afterEach', function () { + var fn = function () {}; + this.suite.afterEach(fn); + + this.suite._afterEach.should.have.length(1); + var afterEachItem = this.suite._afterEach[0]; + afterEachItem.title.should.match(/^"after each" hook/); + afterEachItem.fn.should.equal(fn); + }); + + it('appends title to hook', function () { + var fn = function () {}; + this.suite.afterEach('test', fn); + + this.suite._afterEach.should.have.length(1); + var beforeAllItem = this.suite._afterEach[0]; + beforeAllItem.title.should.equal('"after each" hook: test'); + beforeAllItem.fn.should.equal(fn); + + function namedFn () {} + this.suite.afterEach(namedFn); + this.suite._afterEach.should.have.length(2); + beforeAllItem = this.suite._afterEach[1]; + beforeAllItem.title.should.equal('"after each" hook: namedFn'); + beforeAllItem.fn.should.equal(namedFn); + }); + }); + }); + + describe('.addSuite()', function () { + beforeEach(function () { + this.first = new Suite('First suite'); + this.first.timeout(4002); + this.first.slow(200); + this.second = new Suite('Second suite'); + this.first.addSuite(this.second); + }); + + it('sets the parent on the added Suite', function () { + this.second.parent.should.equal(this.first); + }); + + it('copies the timeout value', function () { + this.second.timeout().should.equal(4002); + }); + + it('copies the slow value', function () { + this.second.slow().should.equal(200); + }); + + it('adds the suite to the suites collection', function () { + this.first.suites.should.have.length(1); + this.first.suites[0].should.equal(this.second); + }); + + it('treats suite as pending if its parent is pending', function () { + this.first.pending = true; + this.second.isPending.should.be.true; + }); + }); + + // describe('.addTest()', function(){ + // beforeEach(function(){ + // this.suite = new Suite('A Suite', new Context); + // this.suite.timeout(4002); + // this.test = new Test('test'); + // this.suite.addTest(this.test); + // }); + // + // it('sets the parent on the added test', function(){ + // this.test.parent.should.equal(this.suite); + // }); + // + // it('copies the timeout value', function(){ + // this.test.timeout().should.equal(4002); + // }); + // + // it('adds the test to the tests collection', function(){ + // this.suite.tests.should.have.length(1); + // this.suite.tests[0].should.equal(this.test); + // }); + // }); + + describe('.fullTitle()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('when there is no parent', function () { + it('returns the suite title', function () { + this.suite.fullTitle().should.equal('A Suite'); + }); + }); + + describe('when there is a parent', function () { + it('returns the combination of parent\'s and suite\'s title', function () { + var parentSuite = new Suite('I am a parent'); + parentSuite.addSuite(this.suite); + this.suite.fullTitle().should.equal('I am a parent A Suite'); + }); + }); + }); + + describe('.total()', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('when there are no nested suites or tests', function () { + it('should return 0', function () { + this.suite.total().should.equal(0); + }); + }); + + describe('when there are several tests in the suite', function () { + it('should return the number', function () { + this.suite.addTest(new Test('a child test')); + this.suite.addTest(new Test('another child test')); + this.suite.total().should.equal(2); + }); + }); + }); + + describe('.eachTest(fn)', function () { + beforeEach(function () { + this.suite = new Suite('A Suite'); + }); + + describe('when there are no nested suites or tests', function () { + it('should return 0', function () { + var n = 0; + function fn () { n++; } + this.suite.eachTest(fn); + n.should.equal(0); + }); + }); + + describe('when there are several tests in the suite', function () { + it('should return the number', function () { + this.suite.addTest(new Test('a child test')); + this.suite.addTest(new Test('another child test')); + + var n = 0; + function fn () { n++; } + this.suite.eachTest(fn); + n.should.equal(2); + }); + }); + + describe('when there are several levels of nested suites', function () { + it('should return the number', function () { + this.suite.addTest(new Test('a child test')); + var suite = new Suite('a child suite'); + suite.addTest(new Test('a test in a child suite')); + this.suite.addSuite(suite); + + var n = 0; + function fn () { n++; } + this.suite.eachTest(fn); + n.should.equal(2); + }); + }); + }); + + describe('initialization', function () { + /* eslint no-new: off */ + it('should throw an error if the title isn\'t a string', function () { + (function () { + new Suite(undefined, 'root'); + }).should.throw(); + + (function () { + new Suite(function () {}, 'root'); + }).should.throw(); + }); + + it('should not throw if the title is a string', function () { + (function () { + new Suite('Bdd suite', 'root'); + }).should.not.throw(); + }); + }); +}); + +describe('Test', function () { + describe('initialization', function () { + it('should throw an error if the title isn\'t a string', function () { + (function () { + new Test(function () {}); + }).should.throw(); + + (function () { + new Test(undefined, function () {}); + }).should.throw(); + }); + + it('should not throw if the title is a string', function () { + (function () { + new Test('test-case', function () {}); + }).should.not.throw(); + }); + }); +}); |