UNPKG

@testim/testim-cli

Version:

Command line interface for running Testing on you CI

100 lines (82 loc) 3.61 kB
var Promise = require('bluebird'); require('./bluebirdConfig.js'); var reporter = require('./resultReporter.js'); var firebaseConnection = require('./testimFirebaseConnection.js'); var ExecutionQueue = require('./executionQueue.js'); var Worker = require('./worker.js'); var guid = require('node-uuid').v4; var TestRunStatus = require('./testRunStatus.js'); var logger = { log : console.log.bind(console), error : console.error.bind(console) }; var CONCURRENT_WORKER_COUNT = parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT) || 1; function createQueue(executionId, testList, labels){ return new ExecutionQueue(executionId, testList, labels); } function createWorkers(count, queue){ function createWorker(){ return new Worker(queue); } return Array.from(new Array(count), createWorker); } function showTestList(testInfoList) { logger.log("Got batch to run:"); testInfoList.forEach(function(testInfo, index){ logger.log("\t", index+1, ":", testInfo.name, "("+ testInfo.testId + ")"); }); logger.log("-----------------------------------------------------------------------"); } module.exports.run = function(options) { 'use strict'; logger.log("-----------------------------------------------------------------------"); logger.log("Running Project:", options.project, "Label:", options.label); logger.log("-----------------------------------------------------------------------"); var browserOptions = { host : options.host, port : options.port, sauceLabs : options.sauceLabs, ext : options.ext }; var combinedTestResults = {}; firebaseConnection.init(options.token, options.project); return firebaseConnection.getTestList(options.label, options.testId).then(function(testInfoList) { var testCount = testInfoList.length; var executionId = guid(); var testStatus = new TestRunStatus(testInfoList); var executionQueue = createQueue(executionId, testInfoList, options.label); testStatus.executionStart(executionId); return new Promise(function (resolve) { if (testInfoList.length === 0) { logger.log("no tests to run"); return resolve(); } showTestList(testInfoList); var onTestStarted = function (wid, testId) { testStatus.testStart(wid, testId); }; var onTestCompleted = function (wid, testResult) { var testId = Object.keys(testResult)[0]; var results = testResult[testId]; testStatus.testEnd(wid, testId, results.testResults.success); combinedTestResults[testId] = results; var completedTests = Object.keys(combinedTestResults).length; if (completedTests === testCount) { resolve(combinedTestResults); } }; createWorkers(CONCURRENT_WORKER_COUNT, executionQueue).forEach(function (worker, index) { setTimeout(function () { worker.start(options.baseUrl, browserOptions, onTestStarted.bind(this), onTestCompleted.bind(this)); }, (index * 1500)); }.bind(this)); }.bind(this)) .then(function() { testStatus.executionEnd(executionId); return executionQueue.close(); }) .then(function(/*testResults*/) { return reporter.createResultsReport(options.reportFile, options.project, combinedTestResults); }); }); };