我的nodejs git branches test有问题。这是代码:
var exec = require('child_process').exec;
var request = require('request');
var cheerio = require('cheerio');
var async = require('async');
var currentDir = ""; // dir
var getBranches = "git for-each-ref --sort=-committerdate refs/remotes/origin/ --format='%(refname:short)'";
var getAuthors = "git for-each-ref --sort=-committerdate refs/remotes/origin/ --format='%(committername)'";
var branches = [];
var errorBranches = [];
var authors = [];
var manager = [];
var result = [];
var fs = require('fs');
var openedBranches = "";
var outFile = 'BranchesTest-results.xml';
var failuresFound = false;
function eliminateDuplicates(arr) {
'use strict';
var i,
out = [],
obj = {};
for (i = 0; i < arr.length; i++)
obj[arr[i]] = 0;
for (i in obj) {
if (obj.hasOwnProperty(i))
out.push(i);
}
return out;
}
function showBranchesStats(branches, cb) {
'use strict';
console.log("in showBranchesStats method\n");
var branchesName = [];
var committers = [];
var temp = [];
var j = 0,
k = 0;
for (var i = 0; i < branches.length; i++) {
var filter = branches[i].match(/(md|dr)[_\-](\d+)/i);
if (filter !== null) {
filter = filter[1] + '-' + filter[2];
temp[j] = authors[i];
branchesName[j++] = filter;
}
else {
if (!branches[i].match(/(develop|master|HEAD)/ig))
errorBranches[k++] = branches[i];
}
}
var obj = {};
for (i = 0; i < branchesName.length; i++)
obj[branchesName[i]] = 0;
for (i in obj) {
if (obj.hasOwnProperty(i))
committers.push(temp[branchesName.indexOf(i)]);
}
branchesName = eliminateDuplicates(branchesName);
errorBranches = eliminateDuplicates(errorBranches);
var closedBranches = [];
var tasks = [];
j = 0;
for (i = 0; i < branchesName.length; i++) {
tasks.push(getTask(i));
}
tasks[0]();
var endedCounter = 0;
function onEnd() {
if (++endedCounter < branchesName.length) {
console.log(endedCounter + '/' + branchesName.length);
tasks[endedCounter]();
return;
}
console.log("All requests finished\n");
for (var i = 0; i < manager.length; i++) {
result[i] = [];
result[i] = closedBranches[i].slice(0, -1).split("\n");
}
TestResult(cb);
}
function getTask(i) {
return function () {
console.log("Request #" + i + "\n");
request('SERVERNAME' + branchesName[i] + '?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue-tabs', function (error, response, html) {
if (!error && response.statusCode === 200) {
var $ = cheerio.load(html);
try {
var data = $('.actionContainer:contains("Closed")');
if (data.length > 0) {
//var _manager = ('not(.twixi-wrap)', data).last().children().eq(0).children().children().eq(0).text();
var _manager = committers[i];
var _hasClosed = ('not(.twixi-wrap)', data).last().find(".activity-new-val").text().indexOf("Closed");
if (_manager && _hasClosed) {
var flag = false;
for (var s = 0; s < manager.length; s++)
if (manager[s] === _manager)
flag = true;
if (_hasClosed !== -1) {
if (j >= 0 && flag === false) {
manager[j++] = _manager;
closedBranches[manager.indexOf(_manager)] = "";
}
closedBranches[manager.indexOf(_manager)] += "SERVERNAME" + $('title').text().substring(2, 9) + "\n";
}
else
openedBranches += "SERVERNAME" + $('title').text().substring(2, 9) + " --- OPENED [OK] ----\n";
}
}
else
openedBranches += "SERVERNAME" + $('title').text().substring(2, 9) + " --- OPENED [OK] ----\n";
}
catch (ex) {
console.log("Something wrong happened with your request. Details: " + ex);
}
onEnd();
}
else {
console.log("Something wrong happened with your request. Details: " + error);
failuresFound = true;
cb();
}
});
};
}
}
function TestResult(cb) {
'use strict';
console.log("Results file constructing started\n");
outFile = fs.openSync(outFile, 'w');
fs.writeSync(outFile, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
fs.writeSync(outFile, "<testsuites>\n");
for (var i = 0; i < manager.length; i++) {
fs.writeSync(outFile, "\t<testsuite name=\"" + manager[i] + "\">\n");
for (var j = 0; j < result[i].length; j++) {
fs.writeSync(outFile, "\t\t<testcase name=\"" + result[i][j] + "\">\n");
fs.writeSync(outFile, "\t\t\t<failure message=\"Branch Test Failure\">\n");
fs.writeSync(outFile, "\t\t\t\tError! Found closed branch: " + result[i][j] + "\n");
fs.writeSync(outFile, "\t\t\t</failure>\n");
fs.writeSync(outFile, "\t\t</testcase>\n");
failuresFound = true;
}
fs.writeSync(outFile, "\t</testsuite>\n");
}
console.log("\nOpened branches: \n\n" + openedBranches);
if (!failuresFound) {
fs.writeSync(outFile, "\t<testsuite name=\"BranchTest\">\n");
fs.writeSync(outFile, "\t\t<testcase name=\"BranchTest\"/>\n");
fs.writeSync(outFile, "\t</testsuite>\n");
}
fs.writeSync(outFile, "</testsuites>");
fs.closeSync(outFile);
console.log("\nError branches: \n");
for (var k = 0; k < errorBranches.length; k++)
console.log(errorBranches[k]);
console.log('Test result : ' + (failuresFound ? '' : 'no ') + 'failures found');
cb();
}
this.check = function () {
'use strict';
console.log("Execution started\n");
var funcs = [
function (cb) {
console.log('started 1');
exec(getAuthors, {cwd: currentDir}, function (error, stdout, stderr) {
console.log('started 1.1');
if (stderr) {
console.log('stderr: ' + stderr + "\n");
failuresFound = true;
cb();
}
else {
authors = stdout.split('\n');
console.log("Authors has been received\n");
cb();
}
if (error !== null) {
console.log('Execution command error: ' + error + "\n");
failuresFound = true;
cb();
}
});
},
function (cb) {
console.log('started 2');
exec(getBranches, {cwd: currentDir}, function (error, stdout, stderr) {
console.log("started 2.1");
if (stderr) {
console.log('stderr: ' + stderr + "\n");
failuresFound = true;
cb();
}
else {
branches = stdout.split('\n');
console.log("Going to showBranchesStats method\n");
showBranchesStats(branches, cb);
}
if (error !== null) {
console.log('Execution command error: ' + error + "\n");
failuresFound = true;
cb();
}
});
}
];
console.log('async.waterfall');
async.waterfall(funcs, function () {
console.log("Execution finished\n");
return !failuresFound;
});
};
它&#39;所有工作都在本地完美,但是当我试图在命令行或Jenkins上运行它时,这样:
grunt test_Branches
发生了错误的事情&amp;我得到这个日志:
+ npm i
+ grunt test_Branches
[4mRunning "test_Branches" task[24m
Execution started
async.waterfall
Done, without errors.
帮助,请!