Skip to content

Commit 138e69f

Browse files
committed
fix --ui issues, closes #3746
move all ui-related tests into `test/integration/options/ui.spec.js`
1 parent 6d5a0db commit 138e69f

File tree

5 files changed

+54
-35
lines changed

5 files changed

+54
-35
lines changed

lib/mocha.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -260,25 +260,30 @@ Mocha.prototype.reporter = function(reporter, reporterOptions) {
260260
* @public
261261
* @see {@link https://mochajs.org/#-u---ui-name|CLI option}
262262
* @see {@link https://mochajs.org/#interfaces|Interface DSLs}
263-
* @param {string} [name=bdd] - Interface name.
263+
* @param {string|Function} [ui=bdd] - Interface name or class.
264264
* @returns {Mocha} this
265265
* @chainable
266266
* @throws {Error} if requested interface cannot be loaded
267267
*/
268-
Mocha.prototype.ui = function(name) {
269-
name = name || 'bdd';
270-
this._ui = exports.interfaces[name];
271-
if (!this._ui) {
272-
try {
273-
this._ui = require(name);
274-
} catch (err) {
275-
throw createInvalidInterfaceError(
276-
'invalid interface ' + sQuote(name),
277-
name
278-
);
268+
Mocha.prototype.ui = function(ui) {
269+
var factory;
270+
if (typeof ui === 'function') {
271+
factory = ui;
272+
} else {
273+
ui = ui || 'bdd';
274+
factory = exports.interfaces[ui];
275+
if (!factory) {
276+
try {
277+
factory = require(ui);
278+
} catch (err) {
279+
throw createInvalidInterfaceError(
280+
'invalid interface ' + sQuote(ui),
281+
ui
282+
);
283+
}
279284
}
280285
}
281-
this._ui = this._ui(this.suite);
286+
this._ui = factory(this.suite);
282287

283288
this.suite.on(EVENT_FILE_PRE_REQUIRE, function(context) {
284289
exports.afterEach = context.afterEach || context.teardown;

test/integration/fixtures/regression/1794/simple-ui.fixture.js renamed to test/integration/fixtures/simple-ui.fixture.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
var Mocha = require('../../../../../lib/mocha');
3+
var Mocha = require('../../../lib/mocha');
44
var Test = Mocha.Test;
55
var EVENT_FILE_PRE_REQUIRE = Mocha.Suite.constants.EVENT_FILE_PRE_REQUIRE;
66

@@ -13,7 +13,7 @@ module.exports = Mocha.interfaces['simple-ui'] = function(suite) {
1313
file,
1414
mocha
1515
) {
16-
var common = require('../../../../../lib/interfaces/common')(
16+
var common = require('../../../lib/interfaces/common')(
1717
[suite],
1818
context
1919
);

test/integration/fixtures/regression/1794/issue-1794.fixture.js renamed to test/integration/fixtures/test-for-simple-ui.fixture.js

File renamed without changes.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'use strict';
2+
3+
var helpers = require('../helpers');
4+
var runMocha = helpers.runMocha;
5+
6+
describe('--ui', function() {
7+
var simpleUiPath = require.resolve('../fixtures/simple-ui.fixture');
8+
9+
it('should load interface and run it', function(done) {
10+
runMocha('test-for-simple-ui', ['--ui', simpleUiPath], function(err, res) {
11+
if (err) {
12+
done(err);
13+
return;
14+
}
15+
expect(res, 'to have passed');
16+
done();
17+
});
18+
});
19+
20+
it("should work if required and name added to Mocha's `interfaces` prop", function(done) {
21+
runMocha(
22+
'test-for-simple-ui',
23+
['--require', simpleUiPath, '--ui', 'simple-ui'],
24+
function(err, res) {
25+
if (err) {
26+
done(err);
27+
return;
28+
}
29+
expect(res, 'to have passed');
30+
done();
31+
}
32+
);
33+
});
34+
});

test/integration/regression.spec.js

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
'use strict';
22

3-
var path = require('path');
43
var run = require('./helpers').runMocha;
54
var runJSON = require('./helpers').runMochaJSON;
65

@@ -25,25 +24,6 @@ describe('regressions', function() {
2524
});
2625
});
2726

28-
it("issue-1794: Can't --require custom UI and use it", function(done) {
29-
var simpleUiPath = path.join(
30-
__dirname,
31-
'fixtures',
32-
'regression',
33-
'1794',
34-
'simple-ui.fixture.js'
35-
);
36-
var args = ['--require', simpleUiPath, '--ui', 'simple-ui'];
37-
run('regression/1794/issue-1794.fixture.js', args, function(err, res) {
38-
if (err) {
39-
done(err);
40-
return;
41-
}
42-
expect(res, 'to have passed');
43-
done();
44-
});
45-
});
46-
4727
it('issue-1991: Declarations do not get cleaned up unless you set them to `null` - Memory Leak', function(done) {
4828
// on a modern MBP takes ±5 seconds on node 4.0, but on older laptops with node 0.12 ±40 seconds.
4929
// Could easily take longer on even weaker machines (Travis-CI containers for example).

0 commit comments

Comments
 (0)