PlaywrightとJest + TypeScriptでE2Eテスト
PlaywrightはMicrosoftのOSSでpuppeteer互換なクロスブラウザテストが書けるツールです。 Install 使用するには、Jestのpresetなどと一緒にインストールが必要です。 Create […]
広告ここから
広告ここまで
目次
PlaywrightはMicrosoftのOSSでpuppeteer互換なクロスブラウザテストが書けるツールです。
Install
使用するには、Jestのpresetなどと一緒にインストールが必要です。
$ yarn add -D jest jest-playwright-preset playwright ts-jest
Create files
Jestの設定と、Playwrightの設定ファイル、そしてテストコードを書くファイルを用意します。
$ mkdir e2e
$ touch e2e/jest-playwright.config.js e2e/jest.config.js index.e2e.ts
e2e/jest-playwright.confg.js
playwrightの設定では、テスト用のサーバーを立ち上げる設定を書きます。下のコードでは、CirclCI上ではビルドされたアプリの方にE2Eテストを実行するようにしています。
module.exports = {
serverOptions: {
command: process.env.CI ? 'npx serve build -p 3000' : 'BROWSER=none npm start',
port: 3000,
launchTimeout: 200000,
debug: true,
},
};
e2e/jest.config.js
Jestの設定です。playwrightとts-jestが動く必要がありますので、設定しましょう。
module.exports = {
preset: 'jest-playwright-preset',
testEnvironment: 'jsdom',
moduleFileExtensions: [
'ts',
'js'
],
"testMatch": ["/**/*.e2e.js", "/**/*.e2e.ts"],
globals: {
"ts-jest": {
"tsConfig": "tsconfig.json"
}
},
transform: {
"^.+\.(ts|tsx)$": "ts-jest"
},
};
e2e/index.e2e.ts
あとはTypeScriptでE2Eテストを書くだけです。型定義も同梱されているあたりさすがMicrosoftですね。
import {
webkit,
firefox,
chromium,
Browser,
Page,
} from 'playwright';
const browserTypes = [chromium, firefox, webkit];
const shouldMatchOuterHTMLSnapshot = async (selector, page) => {
const elementHandle = await page.$(selector);
const jsHandle = await elementHandle.getProperty('outerHTML');
const json = await jsHandle.jsonValue();
expect(json).toMatchSnapshot();
};
describe.each([
[chromium.name(), chromium],
[firefox.name(), firefox],
[webkit.name(), webkit],
])('test on %p', (_browserName, browserType) => {
let browser: Browser
let page: Page
beforeAll(async () => {
browser = await browserType.launch();
const context = await browser.newContext();
page = await context.newPage();
await page.goto('http://localhost:3000');
});
afterAll(async () => {
await browser.close();
});
it('should match snapshot [body]', async () => {
await shouldMatchOuterHTMLSnapshot('[data-test="app.root"]', page);
});
it('should match snapshot', async () => {
await shouldMatchOuterHTMLSnapshot('[data-test="login.form"]', page);
});
});
Resources
- playwright: https://github.com/microsoft/playwright
- jest-playwright-preset: https://github.com/playwright-community/jest-playwright
- PlaywrightとJestでクロスブラウザテストを実装する: https://kimulaco.com/post/jest-playwright/