Chris@17
|
1 import { spawn } from 'child_process';
|
Chris@17
|
2 import path from 'path';
|
Chris@17
|
3 import fs from 'fs';
|
Chris@17
|
4 import mkdirp from 'mkdirp';
|
Chris@17
|
5 import chromedriver from 'chromedriver';
|
Chris@17
|
6 import nightwatchSettings from './nightwatch.conf';
|
Chris@17
|
7
|
Chris@17
|
8 const commandAsWebserver = command => {
|
Chris@17
|
9 if (process.env.DRUPAL_TEST_WEBSERVER_USER) {
|
Chris@17
|
10 return `sudo -u ${process.env.DRUPAL_TEST_WEBSERVER_USER} ${command}`;
|
Chris@17
|
11 }
|
Chris@17
|
12 return command;
|
Chris@17
|
13 };
|
Chris@17
|
14
|
Chris@17
|
15 module.exports = {
|
Chris@17
|
16 before: done => {
|
Chris@17
|
17 if (JSON.parse(process.env.DRUPAL_TEST_CHROMEDRIVER_AUTOSTART)) {
|
Chris@17
|
18 chromedriver.start();
|
Chris@17
|
19 }
|
Chris@17
|
20 done();
|
Chris@17
|
21 },
|
Chris@17
|
22 after: done => {
|
Chris@17
|
23 if (JSON.parse(process.env.DRUPAL_TEST_CHROMEDRIVER_AUTOSTART)) {
|
Chris@17
|
24 chromedriver.stop();
|
Chris@17
|
25 }
|
Chris@17
|
26 done();
|
Chris@17
|
27 },
|
Chris@17
|
28 afterEach: (browser, done) => {
|
Chris@17
|
29 // Writes the console log - used by the "logAndEnd" command.
|
Chris@17
|
30 if (
|
Chris@17
|
31 browser.drupalLogConsole &&
|
Chris@17
|
32 (!browser.drupalLogConsoleOnlyOnError ||
|
Chris@17
|
33 browser.currentTest.results.errors > 0 ||
|
Chris@17
|
34 browser.currentTest.results.failed > 0)
|
Chris@17
|
35 ) {
|
Chris@17
|
36 const resultPath = path.join(
|
Chris@17
|
37 __dirname,
|
Chris@17
|
38 `../../../${nightwatchSettings.output_folder}/consoleLogs/${
|
Chris@17
|
39 browser.currentTest.module
|
Chris@17
|
40 }`,
|
Chris@17
|
41 );
|
Chris@17
|
42 const status =
|
Chris@17
|
43 browser.currentTest.results.errors > 0 ||
|
Chris@17
|
44 browser.currentTest.results.failed > 0
|
Chris@17
|
45 ? 'FAILED'
|
Chris@17
|
46 : 'PASSED';
|
Chris@17
|
47 mkdirp.sync(resultPath);
|
Chris@17
|
48 const now = new Date().toString().replace(/[\s]+/g, '-');
|
Chris@17
|
49 const testName = (
|
Chris@17
|
50 browser.currentTest.name || browser.currentTest.module
|
Chris@17
|
51 ).replace(/[\s/]+/g, '-');
|
Chris@17
|
52 browser
|
Chris@17
|
53 .getLog('browser', logEntries => {
|
Chris@17
|
54 const browserLog = JSON.stringify(logEntries, null, ' ');
|
Chris@17
|
55 fs.writeFileSync(
|
Chris@17
|
56 `${resultPath}/${testName}_${status}_${now}_console.json`,
|
Chris@17
|
57 browserLog,
|
Chris@17
|
58 );
|
Chris@17
|
59 })
|
Chris@17
|
60 .end(done);
|
Chris@17
|
61 } else {
|
Chris@17
|
62 browser.end(done);
|
Chris@17
|
63 }
|
Chris@17
|
64 },
|
Chris@17
|
65 commandAsWebserver,
|
Chris@17
|
66 };
|