creevey
Version:
Cross-browser screenshot testing tool for Storybook with fancy UI Runner
181 lines (153 loc) • 5.53 kB
Markdown
- `--config` — Specify path to config file. Default `.creevey/config.js` or `creevey.config.js`
- `--ui` — Start runner web server
- `--update` — Approve all images from `report` directory
- `--port` — Specify port for web server. Default `3000`
- `--reportDir` — Path where reports will be stored
- `--screenDir` — Path where reference images are located
- `--debug` — Enable debug output
In default configuration Creevey take screenshots of `
```ts
module.exports = {
browsers: {
chrome: {
browserName: 'chrome',
// Define initial viewport size
viewport: { width: 1024, height: 720 },
// Increase parallel sessions
limit: 2,
},
firefox: {
browserName: 'firefox',
viewport: { width: 1024, height: 720 },
},
},
};
```
:warning: **WARN** :warning: This config is just an example with all possible options. :warning: **WARN** :warning:
```ts
const path = require('path');
module.exports = {
// Specify custom Selenium Grid url (see usage below)
// In most cases you don't need this option
gridUrl: '<gridUrl>/wd/hub',
// Default Storybook url
storybookUrl: 'http://localhost:6006',
// Storybook config directory
storybookDir: path.join(__dirname, '.storybook'),
// Where original images are stored
screenDir: path.join(__dirname, '../images'),
// Report directory that contains data from previous runs
reportDir: path.join(__dirname, '../report'),
// Pixelmatch options
diffOptions: { threshold: 0.1 },
// How many times test should be retried before to consider it as failed
maxRetries: 2,
// Describe browsers and their options
browsers: {
// Shorthand declarations of browsers
chrome: true,
ff: 'firefox',
otherChrome: {
browserName: 'chrome',
// Define initial viewport size
viewport: { width: 1024, height: 720 },
// Increase parallel sessions
limit: 2,
/* Also you can define any browser capabilities here */
version: '86.0',
// It's possible to set Storybook's globals
// https://github.com/storybookjs/storybook/blob/v6.0.0/docs/essentials/toolbars-and-globals.md
// NOTE: This is an experimental feature and will be replaced in future
_storybookGlobals: {
myTheme: 'dark',
},
},
// You can override some global options for specific browser
ie11: {
browserName: 'internet explorer',
// Like user another Selenium Grid url
gridUrl: '<anotherGridUrl>/wd/hub',
// Or use different storybook instance
storybookUrl: 'http://mystoryhost:6007',
// And use you own docker image
// By default Creevey will use selenoid image according browser name and version:
// `selenoid/${browserName}:${version ?? 'latest'}` image
dockerImage: 'microsoft/ie:11.0',
},
},
// You may want to do something before tests started (for example start browserstack-local)
hooks: {
async before() {
/* ... */
},
async after() {
/* ... */
},
},
};
```
Also you could define parameters on `kind` or `story` levels. All these parameters are deeply merged by storybook for each story.
```tsx
import React from 'react';
import { Meta, Story } from '@storybook/react';
import { CreeveyMeta, CreeveyStory } from 'creevey';
import MyComponent from './src/components/MyComponent';
export default {
title: 'MyComponent'
parameters: {
creevey: {
// You could skip some browsers/stories or even specific tests
skip: [
{ in: 'ie11', reason: '`MyComponent` do not support IE11' },
{ in: 'firefox', stories: 'Loading' },
{
in: ['firefox', 'chrome'],
tests: /.*hover$/,
reason: 'For some reason `MyComponent` hovering do not work correctly',
},
],
},
},
} as Meta & CreeveyMeta;
export const Basic: Story & CreeveyStory = () => <MyComponent />;
Basic.parameters = {
creevey: {
captureElement: '.container',
// elements to ignore in capturing screenshot
ignoreElements: ['button', '.local-time'],
// Delay before test starts in ms
delay: 1000,
tests: {
/* ... */
},
},
};
```
- Skip all stories for all browsers:
- `skip: true`
- `skip: 'Skip reason message'`
- `skip: { reason: 'Skip reason message' }`
- Skip all stories for specific browsers:
- `skip: { in: 'ie11' }`
- `skip: { in: ['ie11', 'chrome'] }`
- `skip: { in: /^fire.*/ }`
- Skip all stories in specific kinds:
- `skip: { kinds: 'Button' }`
- `skip: { kinds: ['Button', 'Input'] }`
- `skip: { kinds: /.*Modal$/ }`
- Skip all tests in specific stories:
- `skip: { stories: 'simple' }`
- `skip: { stories: ['simple', 'special'] }`
- `skip: { stories: /.*large$/ }`
- Skip specific tests:
- `skip: { tests: 'click' }`
- `skip: { tests: ['hover', 'click'] }`
- `skip: { tests: /^press.*$/ }`
- Multiple skip options: `skip: [{ /* ... */ }]`
NOTE: If you try to skip stories by story name, the storybook name format will be used (For more info see [storybook-export-vs-name-handling](https://storybook.js.org/docs/formats/component-story-format/#storybook-export-vs-name-handling))