| 'use strict'; |
| |
| var Test = require('../test'); |
| var EVENT_FILE_PRE_REQUIRE = require('../suite').constants |
| .EVENT_FILE_PRE_REQUIRE; |
| |
| /** |
| * BDD-style interface: |
| * |
| * describe('Array', function() { |
| * describe('#indexOf()', function() { |
| * it('should return -1 when not present', function() { |
| * // ... |
| * }); |
| * |
| * it('should return the index when present', function() { |
| * // ... |
| * }); |
| * }); |
| * }); |
| * |
| * @param {Suite} suite Root suite. |
| */ |
| module.exports = function bddInterface(suite) { |
| var suites = [suite]; |
| |
| suite.on(EVENT_FILE_PRE_REQUIRE, function(context, file, mocha) { |
| var common = require('./common')(suites, context, mocha); |
| |
| context.before = common.before; |
| context.after = common.after; |
| context.beforeEach = common.beforeEach; |
| context.afterEach = common.afterEach; |
| context.run = mocha.options.delay && common.runWithSuite(suite); |
| /** |
| * Describe a "suite" with the given `title` |
| * and callback `fn` containing nested suites |
| * and/or tests. |
| */ |
| |
| context.describe = context.context = function(title, fn) { |
| return common.suite.create({ |
| title: title, |
| file: file, |
| fn: fn |
| }); |
| }; |
| |
| /** |
| * Pending describe. |
| */ |
| |
| context.xdescribe = context.xcontext = context.describe.skip = function( |
| title, |
| fn |
| ) { |
| return common.suite.skip({ |
| title: title, |
| file: file, |
| fn: fn |
| }); |
| }; |
| |
| /** |
| * Exclusive suite. |
| */ |
| |
| context.describe.only = function(title, fn) { |
| return common.suite.only({ |
| title: title, |
| file: file, |
| fn: fn |
| }); |
| }; |
| |
| /** |
| * Describe a specification or test-case |
| * with the given `title` and callback `fn` |
| * acting as a thunk. |
| */ |
| |
| context.it = context.specify = function(title, fn) { |
| var suite = suites[0]; |
| if (suite.isPending()) { |
| fn = null; |
| } |
| var test = new Test(title, fn); |
| test.file = file; |
| suite.addTest(test); |
| return test; |
| }; |
| |
| /** |
| * Exclusive test-case. |
| */ |
| |
| context.it.only = function(title, fn) { |
| return common.test.only(mocha, context.it(title, fn)); |
| }; |
| |
| /** |
| * Pending test case. |
| */ |
| |
| context.xit = context.xspecify = context.it.skip = function(title) { |
| return context.it(title); |
| }; |
| |
| /** |
| * Number of attempts to retry. |
| */ |
| context.it.retries = function(n) { |
| context.retries(n); |
| }; |
| }); |
| }; |
| |
| module.exports.description = 'BDD or RSpec style [default]'; |