Chris@17: import { spawn } from 'child_process'; Chris@17: import path from 'path'; Chris@17: import fs from 'fs'; Chris@17: import mkdirp from 'mkdirp'; Chris@17: import chromedriver from 'chromedriver'; Chris@17: import nightwatchSettings from './nightwatch.conf'; Chris@17: Chris@17: const commandAsWebserver = command => { Chris@17: if (process.env.DRUPAL_TEST_WEBSERVER_USER) { Chris@17: return `sudo -u ${process.env.DRUPAL_TEST_WEBSERVER_USER} ${command}`; Chris@17: } Chris@17: return command; Chris@17: }; Chris@17: Chris@17: module.exports = { Chris@17: before: done => { Chris@17: if (JSON.parse(process.env.DRUPAL_TEST_CHROMEDRIVER_AUTOSTART)) { Chris@17: chromedriver.start(); Chris@17: } Chris@17: done(); Chris@17: }, Chris@17: after: done => { Chris@17: if (JSON.parse(process.env.DRUPAL_TEST_CHROMEDRIVER_AUTOSTART)) { Chris@17: chromedriver.stop(); Chris@17: } Chris@17: done(); Chris@17: }, Chris@17: afterEach: (browser, done) => { Chris@17: // Writes the console log - used by the "logAndEnd" command. Chris@17: if ( Chris@17: browser.drupalLogConsole && Chris@17: (!browser.drupalLogConsoleOnlyOnError || Chris@17: browser.currentTest.results.errors > 0 || Chris@17: browser.currentTest.results.failed > 0) Chris@17: ) { Chris@17: const resultPath = path.join( Chris@17: __dirname, Chris@17: `../../../${nightwatchSettings.output_folder}/consoleLogs/${ Chris@17: browser.currentTest.module Chris@17: }`, Chris@17: ); Chris@17: const status = Chris@17: browser.currentTest.results.errors > 0 || Chris@17: browser.currentTest.results.failed > 0 Chris@17: ? 'FAILED' Chris@17: : 'PASSED'; Chris@17: mkdirp.sync(resultPath); Chris@17: const now = new Date().toString().replace(/[\s]+/g, '-'); Chris@17: const testName = ( Chris@17: browser.currentTest.name || browser.currentTest.module Chris@17: ).replace(/[\s/]+/g, '-'); Chris@17: browser Chris@17: .getLog('browser', logEntries => { Chris@17: const browserLog = JSON.stringify(logEntries, null, ' '); Chris@17: fs.writeFileSync( Chris@17: `${resultPath}/${testName}_${status}_${now}_console.json`, Chris@17: browserLog, Chris@17: ); Chris@17: }) Chris@17: .end(done); Chris@17: } else { Chris@17: browser.end(done); Chris@17: } Chris@17: }, Chris@17: commandAsWebserver, Chris@17: };