FormidableLabs/jest-puppeteer

Name: jest-puppeteer

Owner: Formidable

Description: Run your tests using Jest & Puppeteer ??

Forked from: smooth-code/jest-puppeteer

Created: 2018-03-17 13:18:37.0

Updated: 2018-03-17 13:18:39.0

Pushed: 2018-03-17 02:45:49.0

Homepage:

Size: 186

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Jest Puppeteer

Build Status version MIT License

Run your tests using Jest & Puppeteer ??

install jest-puppeteer-preset puppeteer
Usage

Update your Jest configuration:


reset": "jest-puppeteer-preset"

Use Puppeteer in your tests:

ribe('Google', () => {
foreAll(async () => {
await page.goto('https://google.com')


('should display "google" text on page', async () => {
await expect(page).toMatch('google')


Recipes
Writing tests using Puppeteer

Writing integration test can be done using Puppeteer API but it can be complicated and hard because API is not designed for testing.

To make it simpler, expect-puppeteer API add some specific matchers if you make expectation on a Puppeteer Page.

Some examples:

Find a text in the page
ssert that current page contains 'Text in the page'
t expect(page).toMatch('Text in the page')
Click a button
ssert that a button containing text "Home" will be clicked
t expect(page).toClick('button', { text: 'Home' })
Fill a form
ssert that a form will be filled
t expect(page).toFillForm('form[name="myForm"]', {
rstName: 'James',
stName: 'Bond',

Start a server

Jest Puppeteer integrates a functionality to run start a server when your test suite is started. It automatically close the server when tests are done.

To use it, specify a server section in your jest-puppeteer.config.js.

est-puppeteer.config.js
le.exports = {
rver: {
command: 'node server.js',
port: 4444,


Configure Puppeteer

Jest Puppeteer automatically detect the best config to start Puppeteer but sometimes you may need to specify custom options. All Puppeteer launch options can be specified in jest-puppeteer.config.js at the root of the project. Since it is JavaScript, you can use all stuff you need, including environment.

est-puppeteer.config.js
le.exports = {
unch: {
dumpio: true,
headless: process.env.HEADLESS !== 'false',


Configure ESLint

Jest Puppeteer exposes two new globals: browser, page and expectPage. If you want to avoid errors, you can add them to your .eslintrc.js:

eslintrc.js
le.exports = {
v: {
jest: true,

obals: {
page: true,
browser: true,
expectPage: true,


Extend PuppeteerEnvironment

Sometimes you want to use your own environment, to do that you can extend PuppeteerEnvironment.

t PuppeteerEnvironment = require('jest-environment-puppeteer')

s CustomEnvironment extends PuppeteerEnvironment {
ync setup() {
await super.setup()
// Your setup


ync teardown() {
// Your teardown
await super.teardown()



le.exports = CustomEnvironment
Access globalSetup or globalTeardown

It is possible to access globalSetup or globalTeardown in your scripts.

t {
tup: setupPuppeteer,
ardown: teardownPuppeteer,
require('jest-environment-puppeteer')

c function setup() {
ait setupPuppeteer()
 ...


c function teardown() {
 ...
ait teardownPuppeteer()

API
global.browser

Give access to the Puppeteer Browser.

should open a new page', async () => {
nst page = await browser.newPage()
ait page.goto('https://google.com')

global.page

Give access to a Puppeteer Page opened at start (you will use it most of time).

should fill an input', async () => {
ait page.type('#myinput', 'Hello')

global.expect(page)

Helper to make Puppeteer assertions, see documentation.

t expect(page).toMatch('A text in the page')
..
jest-puppeteer.config.js

You can specify a jest-puppeteer.config.js at the root of the project.

est-puppeteer.config.js
le.exports = {
unch: {
dumpio: true,
headless: process.env.HEADLESS !== 'false',

rver: {
command: 'node server.js',
port: 4444,


Inspiration

Thanks to Fumihiro Xue for his great Jest example.

License

MIT


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.