-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
119 lines (101 loc) · 3.1 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
var Mocha = require('mocha');
var Suite = require('mocha/lib/suite');
var Test = require('mocha/lib/test');
var escapeRe = require('escape-string-regexp');
var extend = require('util')._extend;
module.exports = Mocha.interfaces['test-options'] = function(suite) {
var suites = [suite];
suite.on('pre-require', function(context, file, mocha) {
var common = require('mocha/lib/interfaces/common')(suites, context);
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, options, fn) {
if(typeof(options) === 'function' && fn == undefined){
fn = options;
options = {}
}
var suite = Suite.create(suites[0], title);
suite.file = file;
suite.testOptions = options;
suites.unshift(suite);
fn.call(suite);
suites.shift();
return suite;
};
/**
* Pending describe.
*/
context.xdescribe = context.xcontext = context.describe.skip = function(title, options, fn) {
if(typeof(options) === 'function' && fn == undefined){
fn = options;
options = {}
}
var suite = Suite.create(suites[0], title);
suite.testOptions = options;
suite.pending = true;
suites.unshift(suite);
fn.call(suite);
suites.shift();
};
/**
* Exclusive suite.
*/
context.describe.only = function(title, options, fn) {
var suite = context.describe(title, options, fn);
mocha.grep(suite.fullTitle());
return suite;
};
/**
* Describe a specification or test-case
* with the given `title` and callback `fn`
* acting as a thunk.
*/
context.it = context.specify = function(title, options, fn) {
var suite = suites[0];
if(typeof(options) === 'function' && fn == undefined){
fn = options;
options = {};
} else if (typeof(options) === 'object' && fn === null){
fn = undefined;
options = {};
}
if (suite.pending) {
fn = null;
}
var test = new Test(title, fn);
test.testOptions = extend(extend({}, suite.testOptions), options);
test.file = file;
suite.addTest(test);
return test;
};
context.it.only = function(title, options, fn) {
var test = context.it(title, options, fn);
var reString = '^' + escapeRe(test.fullTitle()) + '$';
mocha.grep(new RegExp(reString));
return test;
};
/**
* Pending test case.
*/
context.xit = context.xspecify = context.it.skip = function(title, options, fn) {
if(typeof(options) === 'function' && fn == undefined){
options = {}
}
context.it(title, options, null);
};
/**
* Number of attempts to retry.
*/
context.it.retries = function(n) {
context.retries(n);
};
});
};