Возникли некоторые проблемы с обслуживанием моей веб-страницы 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 и обслуживании его из скрипта узла.