summaryrefslogtreecommitdiffstatshomepage
path: root/core/tests/Drupal/Nightwatch/globals.js
blob: fe50dfaaa7e1898c215bcb5ccb43f85664869b7b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { spawn } from 'child_process';
import path from 'path';
import fs from 'fs';
import mkdirp from 'mkdirp';
import chromedriver from 'chromedriver';
import nightwatchSettings from './nightwatch.conf';

const commandAsWebserver = (command) => {
  if (process.env.DRUPAL_TEST_WEBSERVER_USER) {
    return `sudo -u ${process.env.DRUPAL_TEST_WEBSERVER_USER} ${command}`;
  }
  return command;
};

module.exports = {
  before: (done) => {
    if (JSON.parse(process.env.DRUPAL_TEST_CHROMEDRIVER_AUTOSTART)) {
      chromedriver.start();
    }
    done();
  },
  after: (done) => {
    if (JSON.parse(process.env.DRUPAL_TEST_CHROMEDRIVER_AUTOSTART)) {
      chromedriver.stop();
    }
    done();
  },
  afterEach: (browser, done) => {
    // Writes the console log - used by the "logAndEnd" command.
    if (
      browser.drupalLogConsole &&
      (!browser.drupalLogConsoleOnlyOnError || browser.currentTest.results.errors > 0 || browser.currentTest.results.failed > 0)
    ) {
      let testName = browser.currentTest.name || browser.currentTest.module;
      testName = testName.split(' ').join('-');
      const resultPath = path.join(__dirname, `../../../${nightwatchSettings.output_folder}/consoleLogs/${browser.currentTest.module}`);
      const status = browser.currentTest.results.errors > 0 || browser.currentTest.results.failed > 0 ? 'FAILED' : 'PASSED';
      mkdirp.sync(resultPath);
      const now = new Date().toString().split(' ').join('-');
      browser
        .getLog('browser', (logEntries) => {
          const browserLog = JSON.stringify(logEntries, null, '  ');
          fs.writeFileSync(`${resultPath}/${testName}_${status}_${now}_console.json`, browserLog);
        })
        .end(done);
    }
    else {
      browser.end(done);
    }
  },
  commandAsWebserver,
};