UNPKG

1.84 kBJavaScriptView Raw
1var check = require('check-more-types');
2var spawn = require('child_process').spawn;
3var q = require('q');
4var _ = require('lodash');
5
6// hack to find npm bin script reliably
7function findNpmPath() {
8 var os = require('os');
9 var type = os.type();
10 return (/windows/gi).test(type) ? 'npm.cmd' : 'npm';
11}
12
13var NPM_PATH = findNpmPath();
14console.log('found npm path %s', NPM_PATH);
15
16function argsToString(arrayLike) {
17 return Array.prototype.slice.call(arrayLike, 0).join(' ');
18}
19
20function writeToStderr() {
21 process.stderr.write(argsToString(arguments));
22}
23
24function writeToStdout() {
25 process.stderr.write(argsToString(arguments));
26}
27
28// returns a promise
29function test(options) {
30 options = options || {};
31 var log = options.tldr ? _.noop : writeToStdout;
32 var errorLog = options.tldr ? _.noop : writeToStderr;
33 log(' npm test');
34
35 check.verify.string(NPM_PATH, 'missing npm path string');
36 var npm = spawn(NPM_PATH, ['test']);
37 var testOutput = '';
38 var testErrors = '';
39
40 npm.stdout.setEncoding('utf-8');
41 npm.stderr.setEncoding('utf-8');
42
43 npm.stdout.on('data', function (data) {
44 testOutput += data;
45 log(data);
46 });
47
48 npm.stderr.on('data', function (data) {
49 testErrors += data;
50 log(data);
51 });
52
53 npm.on('error', function (err) {
54 errorLog(err);
55 testErrors += err.toString();
56 });
57
58 var deferred = q.defer();
59 npm.on('exit', function (code) {
60 if (code) {
61 errorLog('npm test returned', code);
62 errorLog('test errors:\n' + testErrors);
63
64 deferred.reject({
65 code: code,
66 errors: testErrors
67 });
68 }
69 deferred.resolve();
70 });
71 return deferred.promise;
72}
73
74module.exports = {
75 test: test,
76 npmPath: findNpmPath()
77};