-
-
Notifications
You must be signed in to change notification settings - Fork 40
/
index.js
78 lines (64 loc) · 1.73 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
'use strict';
var path = require('path');
var arrify = require('arrify');
var gutil = require('gulp-util');
var through = require('through2');
var Jasmine = require('jasmine');
var Reporter = require('jasmine-terminal-reporter');
var SilentReporter = require('./silent-reporter');
function deleteRequireCache(id) {
if (!id || id.indexOf('node_modules') !== -1) {
return;
}
var files = require.cache[id];
if (files !== undefined) {
for (var file in files.children) {
deleteRequireCache(files.children[file].id);
}
delete require.cache[id];
}
}
module.exports = function (options) {
options = options || {};
var jasmine = new Jasmine();
if (options.timeout) {
jasmine.jasmine.DEFAULT_TIMEOUT_INTERVAL = options.timeout;
}
var color = process.argv.indexOf('--no-color') === -1;
var reporter = options.reporter;
if (reporter) {
arrify(reporter).forEach(function (el) {
jasmine.addReporter(el);
});
} else {
jasmine.addReporter(new Reporter({
isVerbose: options.verbose,
showColors: color,
includeStackTrace: options.includeStackTrace
}));
}
return through.obj(function (file, enc, cb) {
if (file.isNull()) {
cb(null, file);
return;
}
if (file.isStream()) {
cb(new gutil.PluginError('gulp-jasmine', 'Streaming not supported'));
return;
}
// get the cache object of the specs.js file,
// delete it and its children recursively from cache
var resolvedPath = path.resolve(file.path);
var modId = require.resolve(resolvedPath);
deleteRequireCache(modId);
jasmine.addSpecFile(resolvedPath);
cb(null, file);
}, function (cb) {
try {
jasmine.addReporter(new SilentReporter(cb));
jasmine.execute();
} catch (err) {
cb(new gutil.PluginError('gulp-jasmine', err));
}
});
};