Люди в кружке создали хороший образ докера, который помогает с безголовым кукловодом.Я использовал это для тестирования как circlCI, так и конвейера битбакета.
Моя тестовая установка:
Очень простой тестовый файл mocha / chai, я не настраивал никаких аргументов кукловода для теста circlCI и битбакетного конвейера.
// index.js
module.exports = {
async getLocation(page) {
return page.evaluate(() => window.location.href);
},
};
// test.js
const { expect, assert } = require('chai');
const puppeteer = require('puppeteer');
const example = require('./index');
describe('Puppeteer', () => {
before(async function () {
this.browser = await puppeteer.launch();
this.page = await this.browser.newPage();
});
after(async function () {
await this.browser.close();
process.exit(0);
});
describe('Startup', () => {
it('should start', async function () {
assert.equal('object', typeof this.browser);
});
});
describe('In Browser', () => {
it('url should be blank', async function () {
const url = await example.getLocation(this.page);
expect(url).to.include('about:blank');
});
it('url should have example.com', async function () {
await this.page.goto('http://example.com');
const url = await example.getLocation(this.page);
expect(url).to.include('example.com');
});
});
});
Файл конвейера:
image: circleci/node:8.12.0-browsers
pipelines:
default:
- step:
caches:
- node
script:
- yarn install
- yarn run lint
- yarn run test
Результат для битбакета и окружностей:
Ресурсы:
- Изображение для использования
circleci/node:8.12.0-browsers
, их Dockerfile . - Также проверены аналогичные настройки с dockerfile, предоставленными для этого ответа .
Примечания:
- CirclCI потребовалось меньше времени для извлечения изображений, почти 1-2 секунды в кеше.Всего ~ 13 секунд для полного запуска.
- Bitbucket потребовалось больше времени для извлечения изображений, первое извлечение заняло 2 минуты, в следующий раз - 10 ~ 30 секунд для кэша.Всего ~ 45 секунд, чтобы выполнить весь прогон.
- Возможно, это связано с тем, что ресурсы, выделенные для бесплатной версии, которую я использовал для своих тестов.
Режим заголовка
К счастью, Xvfb предоставляется в обоих докер-файлах, о которых я упоминал выше.Вам просто нужно использовать их.Код также должен иметь аргументы песочницы, чтобы это работало.
Добавьте аргументы:
this.browser = await puppeteer.launch({
headless: false,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
],
})
Замените строку теста следующей,
xvfb-run -a --server-args="-screen 0 1024x768x24" yarn run test
Результат: