Использование Node-скрипта для сборки и обслуживания Gatsby JS для тестирования - PullRequest
0 голосов
/ 27 марта 2020

Возникли некоторые проблемы с обслуживанием моей веб-страницы Gatsby до начала моих тестов.

Сервер. js

const { exec } = require('child_process');

module.exports = {
  start: async (_callback) => {
    await exec('yarn clean && yarn build', function(error, stdout, stderr) {
      var child = exec('yarn serve');
      child.stdout.on('data', function (data) {
        if (data.includes('info gatsby serve running at: http://localhost:9000/')) {
          _callback();
          return true
        }
      });
    });
  }
}

Тест. js

const server = require('./server');
require('chromedriver');
const webdriver = require('selenium-webdriver');
const { Builder, By, Key, until } = require('selenium-webdriver');


const selenium_driver = async () => {
  const driver = new webdriver.Builder()
  .forBrowser('chrome')
  .build();

  await driver.get('http://localhost:9000');
  await driver.wait(function () {
    return driver.isElementPresent(By.id('#call-to-action--hero'));
  }, 5000).then(btn__call_to_action => {
    driver.findElement(btn__call_to_action).click();
    driver.executeScript('dataLayer').then(function(return_value) {
      console.log('returned ', return_value)
    });
    return true
  });
}

beforeAll(async (done) => {
  try {
    await server.start(done);
  } catch (error) {
    console.log(error)
  }
});

test('selenium clicks something', (done) => {
  jest.setTimeout(30000);
  function callback(data) {
    try {
      expect(data).toBe(true);
      done();
    } catch (error) {
      done(error)
    }
  }

  selenium_driver(callback);
});

Я пробовал комбинации обещаний, обратных вызовов и асинхронности c ждут, но каким-то образом тесты go будут включены до достижения конца оператора возврата. Сервер. js написан таким образом, что работает, но кажется, что лучше всего это использовать в другом месте, но он не мог найти много о построении Gatsby и обслуживании его из скрипта узла.

...