aboutsummaryrefslogblamecommitdiffhomepage
path: root/README.md
blob: 6b72cb0b447b96a680ba46d7e043a3eec55b3cf8 (plain) (tree)
1
2
3
4
5
6
7
8
9

                  
                                                                                                                                                                                                      
 


                             

             
                        





























                                                 
 






































                                                                           
 
        
 
   
                                             
   
# Docker Puppeteer

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.

## Usage example

Dockerfile.integration-tests:

```Dockerfile
FROM buildkite/puppeteer
RUN  npm i mocha@5
ENV  PATH="${PATH}:/node_modules/.bin"
```

docker-compose.integration-tests.yml:

```yml
version: '3'
services:
  tests:
    build:
      context: .
      dockerfile: Dockerfile.integration-tests
    volumes:
      - "./integration-tests:/integration-tests"
      - "/screenshots"
    command: mocha --recursive /integration-tests
    links:
      - app
  app:
    image: tutum/hello-world
    expose:
      - "80"
```

integration-tests/index.test.js:

```js
const assert = require('assert')
const puppeteer = require('puppeteer')

let browser
let page

before(async() => {
  browser = await puppeteer.launch({
    args: [
      // Required for Docker version of Puppeteer
      '--no-sandbox',
      '--disable-setuid-sandbox',
      // This will write shared memory files into /tmp instead of /dev/shm,
      // because Docker’s default for /dev/shm is 64MB
      '--disable-dev-shm-usage'
    ]
  })

  const browserVersion = await browser.version()
  console.log(`Started ${browserVersion}`)
})

beforeEach(async() => {
  page = await browser.newPage()
})

afterEach(async() => {
  await page.close()
})

after(async() => {
  await browser.close()
})

describe('App', () => {
  it('renders', async() => {
    const response = await page.goto('http://app/')
    assert(response.ok())
    await page.screenshot({ path: `/screenshots/app.png` })
  })
})
```

Running:

```
docker-compose -f integration-tests run tests
```