description |
---|
Enhance Playwright functionality with Currents fixtures for Playwright |
- Requires
@currents/playwright
1.7.0+
Playwright custom fixtures is an important concept in Playwright ecosystem that allow augmenting and modifying the behaviour of Playwright tests.
Current integration with Playwright includes a several fixtures for enabling advanced Currents features like:
{% stepper %} {% step %}
Create a new file in your repo in a location that can be imported from your tests. (Or if you are already using custom fixtures, follow your existing pattern).
import { test as baseTest } from '@playwright/test';
import {
CurrentsFixtures,
CurrentsWorkerFixtures,
fixtures
} from '@currents/playwright';
export const test = baseTest.extend<CurrentsFixtures, CurrentsWorkerFixtures>({
...fixtures.baseFixtures,
});
{% endstep %}
{% step %}
The baseFixtures
are required for loading the currents config for the other Currents fixtures. You will also want to include any Currents fixture you plan on using. Here is Playwright coverage and Currents Actions as an example:
{% code title="currentsTest.ts" %}
import { test as baseTest } from '@playwright/test';
import {
CurrentsFixtures,
CurrentsWorkerFixtures,
fixtures
} from '@currents/playwright';
export const test = baseTest.extend<CurrentsFixtures, CurrentsWorkerFixtures>({
...fixtures.baseFixtures,
...fixtures.coverageFixtures,
...fixtures.actionFixtures,
});
{% endcode %}
{% endstep %}
{% step %}
We pick up the configuration automatically from the currents.config.js|ts
file - if you created the file you can skip this step. If you explicitly provide config to the Currents reporter in your playwright.config.ts
you will also need to pass that same config to the fixture like this:
{% code title="playwright.config.ts" %}
import {
currentsReporter,
CurrentsWorkerFixtures,
CurrentsFixtures,
} from "@currents/playwright";
import { devices, defineConfig } from "@playwright/test";
const config = defineConfig<CurrentsFixtures, CurrentsWorkerFixtures>({
use: {
// add the currents config here to be used in the fixture
currentsConfigOptions: {
... insert your currents config here
},
// Optionally disable Currents fixtures. (defaults to enabled)
// currentsFixturesEnabled: false
}),
... other config
});
export default config;
{% endcode %}
{% endstep %}
{% step %}
Import the new test
implementation and use it in your tests where you want to use the features provided by the fixtures (or #combine-currents-fixtures-with-existing-custom-fixtures).
import { test } from './currentsTest';
import { expect } from "@playwight/test"
test('basic test', async ({ page }) => {
await todoPage.addToDo('something nice');
await expect(page.getByTestId('todo-title')).toContainText(['something nice']);
});
If you want to test that fixtures are loading, you can confirm that the currentsConfig
is loaded by calling the fixture in one of the tests, and printing it’s result.
import { test } from './currentsTest';
import { expect } from "@playwight/test"
test('basic test', async ({ page, currentsConfig }) => {
console.log(currentsConfig);
await todoPage.addToDo('something nice');
await expect(page.getByTestId('todo-title')).toContainText(['something nice']);
});
{% endstep %} {% endstepper %}
If you already have your own custom fixtures, you will want to use Playwright's mergeTests helper to combined fixtures from multiple modules. The merged result should be exported and used in your tests.
{% code title="fixtures.ts" %}
import { mergeTests } from '@playwright/test';
import { test as dbTest } from 'databaseTest';
import { test as currentsTest } from 'currentsTest';
export const test = mergeTests(currentsTest, dbTest);
{% endcode %}
{% code title="test.spec.ts" %}
import { test } from './fixtures';
test('passes', async ({ database, page, currentsConfig }) => {
// use database and currentsConfig fixtures.
});
{% endcode %}
{% hint style="info" %} When combining the Currents fixtures with existing fixtures, it's often desirable to place the Currents fixtures first. This enables Currents to take actions even if a failure happened in your later fixtures. {% endhint %}
After extending the test
method, many Currents fixtures are enabled by default. If you wish to only conditionally enable them (such as only in CI) you can use the currentsFixturesEnabled
property in your playwright.config.ts
file.
{% code title="playwright.config.ts" %}
// ...
use: {
...
currentsFixturesEnabled: !!process.env.CI,
},
{% endcode %}
baseFixtures
curentsConfigOptions
currentsConfig
gitInfo
Other Currents fixtures depend on these. They are loaded once per worker.