]>
Commit | Line | Data |
---|---|---|
1 | # Docker Puppeteer | |
2 | ||
3 | A base image for running Puppeteer scripts. Add your own tools (such as Jest, Mocha, etc), link services you want to test via Docker Compose, and run your Puppeteer scripts with a headless Chromium. | |
4 | ||
5 | ## Usage example | |
6 | ||
7 | Dockerfile.integration-tests: | |
8 | ||
9 | ```Dockerfile | |
10 | FROM buildkite/puppeteer:version | |
11 | RUN npm i mocha | |
12 | ENV PATH="${PATH}:/node_modules/.bin" | |
13 | ``` | |
14 | ||
15 | docker-compose.integration-tests.yml: | |
16 | ||
17 | ```yml | |
18 | version: '3' | |
19 | services: | |
20 | tests: | |
21 | build: | |
22 | context: . | |
23 | dockerfile: Dockerfile.integration-tests | |
24 | volumes: | |
25 | - "./integration-tests:/integration-tests" | |
26 | - "/screenshots" | |
27 | command: mocha --recursive /integration-tests | |
28 | links: | |
29 | - app | |
30 | app: | |
31 | image: tutum/hello-world | |
32 | expose: | |
33 | - "80" | |
34 | ``` | |
35 | ||
36 | integration-tests/index.test.js: | |
37 | ||
38 | ```js | |
39 | const assert = require('assert') | |
40 | const puppeteer = require('puppeteer') | |
41 | ||
42 | let browser | |
43 | let page | |
44 | ||
45 | before(async() => { | |
46 | browser = await puppeteer.launch({ | |
47 | args: [ | |
48 | // Required for Docker version of Puppeteer | |
49 | '--no-sandbox', | |
50 | '--disable-setuid-sandbox', | |
51 | // This will write shared memory files into /tmp instead of /dev/shm, | |
52 | // because Docker’s default for /dev/shm is 64MB | |
53 | '--disable-dev-shm-usage' | |
54 | ] | |
55 | }) | |
56 | ||
57 | const browserVersion = await browser.version() | |
58 | console.log(`Started ${browserVersion}`) | |
59 | }) | |
60 | ||
61 | beforeEach(async() => { | |
62 | page = await browser.newPage() | |
63 | }) | |
64 | ||
65 | afterEach(async() => { | |
66 | await page.close() | |
67 | }) | |
68 | ||
69 | after(async() => { | |
70 | await browser.close() | |
71 | }) | |
72 | ||
73 | describe('App', () => { | |
74 | it('renders', async() => { | |
75 | const response = await page.goto('http://app/') | |
76 | assert(response.ok()) | |
77 | await page.screenshot({ path: `/screenshots/app.png` }) | |
78 | }) | |
79 | }) | |
80 | ``` | |
81 | ||
82 | Running: | |
83 | ||
84 | ``` | |
85 | docker-compose -f integration-tests run tests | |
86 | ``` |