docs: describe test.setTimeout inside beforeAll/afterAll (#14670)

Adding documentation that `test.setTimeout()` call from the
`beforeAll`/`afterAll` hook changes the timeout of the hook itself.
This commit is contained in:
Dmitry Gozman 2022-06-06 15:18:38 -07:00 committed by GitHub
parent 4c2fc6b6eb
commit 1c6a136909
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 111 additions and 4 deletions

View File

@ -943,7 +943,7 @@ test('very slow test', async ({ page }) => {
});
```
Changing timeout from a slow hook:
Changing timeout from a slow `beforeEach` or `afterEach` hook. Note that this affects the test timeout that is shared with `beforeEach`/`afterEach` hooks.
```js js-flavor=js
const { test, expect } = require('@playwright/test');
@ -963,6 +963,54 @@ test.beforeEach(async ({ page }, testInfo) => {
});
```
Changing timeout for a `beforeAll` or `afterAll` hook. Note this affects the hook's timeout, not the test timeout.
```js js-flavor=js
const { test, expect } = require('@playwright/test');
test.beforeAll(async () => {
// Set timeout for this hook.
test.setTimeout(60000);
});
```
```js js-flavor=ts
import { test, expect } from '@playwright/test';
test.beforeAll(async () => {
// Set timeout for this hook.
test.setTimeout(60000);
});
```
Changing timeout for all tests in a [`method: Test.describe`] group.
```js js-flavor=js
const { test, expect } = require('@playwright/test');
test.describe('group', () => {
// Applies to all tests in this group.
test.setTimeout(60000);
test('test one', async () => { /* ... */ });
test('test two', async () => { /* ... */ });
test('test three', async () => { /* ... */ });
});
```
```js js-flavor=ts
import { test, expect } from '@playwright/test';
test.describe('group', () => {
// Applies to all tests in this group.
test.setTimeout(60000);
test('test one', async () => { /* ... */ });
test('test two', async () => { /* ... */ });
test('test three', async () => { /* ... */ });
});
```
Timeout for the currently running test is available through [`property: TestInfo.timeout`].
### param: Test.setTimeout.timeout
@ -1175,6 +1223,10 @@ test('slow test', async ({ page }) => {
});
```
:::note
[`method: Test.slow#1`] cannot be used in a `beforeAll` or `afterAll` hook. Use [`method: Test.setTimeout`] instead.
:::
## method: Test.slow#2
Conditionally mark a test as "slow" with an optional description. Slow test will be given triple the default timeout.

View File

@ -16,6 +16,7 @@ Playwright Test has multiple configurable timeouts for various tasks.
|Action timeout| no timeout |Timeout for each action:<br/><span style={{textTransform:'uppercase',fontSize:'smaller',fontWeight:'bold',opacity:'0.6'}}>Set default</span><br/><code>{`config = { use: { actionTimeout: 10000 } }`}</code><br/><span style={{textTransform: 'uppercase',fontSize: 'smaller', fontWeight: 'bold', opacity: '0.6'}}>Override</span><br/>`locator.click({ timeout: 10000 })` |
|Navigation timeout| no timeout |Timeout for each navigation action:<br/><span style={{textTransform:'uppercase',fontSize:'smaller',fontWeight:'bold',opacity:'0.6'}}>Set default</span><br/><code>{`config = { use: { navigationTimeout: 30000 } }`}</code><br/><span style={{textTransform: 'uppercase',fontSize: 'smaller', fontWeight: 'bold', opacity: '0.6'}}>Override</span><br/>`page.goto('/', { timeout: 30000 })` |
|Global timeout|no timeout |Global timeout for the whole test run:<br/><span style={{textTransform:'uppercase',fontSize:'smaller',fontWeight:'bold',opacity:'0.6'}}>Set in config</span><br/>`config = { globalTimeout: 60*60*1000 }`<br/> |
|`beforeAll`/`afterAll` timeout|30000 ms|Timeout for the hook:<br/><span style={{textTransform:'uppercase',fontSize:'smaller',fontWeight:'bold',opacity:'0.6'}}>Set in hook</span><br/>`test.setTimeout(60000)`<br/> |
|Fixture timeout|no timeout |Timeout for an individual fixture:<br/><span style={{textTransform:'uppercase',fontSize:'smaller',fontWeight:'bold',opacity:'0.6'}}>Set in fixture</span><br/>`{ scope: 'test', timeout: 30000 }`<br/> |
## Test timeout
@ -30,7 +31,7 @@ example.spec.ts:3:1 basic test ===========================
Timeout of 30000ms exceeded.
```
The same test timeout also applies to `beforeAll` and `afterAll` hooks.
The same timeout value also applies to `beforeAll` and `afterAll` hooks, but they do not share time with any test.
### Set test timeout in the config
@ -90,7 +91,7 @@ test('very slow test', async ({ page }) => {
API reference: [`method: Test.setTimeout`] and [`method: Test.slow#1`].
### Change timeout from a hook
### Change timeout from a slow hook
```js js-flavor=js
const { test, expect } = require('@playwright/test');
@ -112,6 +113,30 @@ test.beforeEach(async ({ page }, testInfo) => {
API reference: [`method: TestInfo.setTimeout`].
### Change timeout for `beforeAll`/`afterAll` hook
`beforeAll` and `afterAll` hooks have a separate timeout, by default equal to test timeout. You can change it separately for each hook by calling [`method: TestInfo.setTimeout`] inside the hook.
```js js-flavor=js
const { test, expect } = require('@playwright/test');
test.beforeAll(async () => {
// Set timeout for this hook.
test.setTimeout(60000);
});
```
```js js-flavor=ts
import { test, expect } from '@playwright/test';
test.beforeAll(async () => {
// Set timeout for this hook.
test.setTimeout(60000);
});
```
API reference: [`method: TestInfo.setTimeout`].
## Expect timeout
Web-first assertions like `expect(locator).toHaveText()` have a separate timeout, 5 seconds by default. Assertion timeout is unrelated to the test timeout. It produces the following error:

View File

@ -2144,6 +2144,8 @@ export interface TestType<TestArgs extends KeyValue, WorkerArgs extends KeyValue
* });
* ```
*
* > NOTE: [test.slow()](https://playwright.dev/docs/api/class-test#test-slow-1) cannot be used in a `beforeAll` or
* `afterAll` hook. Use [test.setTimeout(timeout)](https://playwright.dev/docs/api/class-test#test-set-timeout) instead.
*/
slow(): void;
/**
@ -2196,7 +2198,8 @@ export interface TestType<TestArgs extends KeyValue, WorkerArgs extends KeyValue
* });
* ```
*
* Changing timeout from a slow hook:
* Changing timeout from a slow `beforeEach` or `afterEach` hook. Note that this affects the test timeout that is shared
* with `beforeEach`/`afterEach` hooks.
*
* ```ts
* import { test, expect } from '@playwright/test';
@ -2207,6 +2210,33 @@ export interface TestType<TestArgs extends KeyValue, WorkerArgs extends KeyValue
* });
* ```
*
* Changing timeout for a `beforeAll` or `afterAll` hook. Note this affects the hook's timeout, not the test timeout.
*
* ```ts
* import { test, expect } from '@playwright/test';
*
* test.beforeAll(async () => {
* // Set timeout for this hook.
* test.setTimeout(60000);
* });
* ```
*
* Changing timeout for all tests in a
* [test.describe(title, callback)](https://playwright.dev/docs/api/class-test#test-describe) group.
*
* ```ts
* import { test, expect } from '@playwright/test';
*
* test.describe('group', () => {
* // Applies to all tests in this group.
* test.setTimeout(60000);
*
* test('test one', async () => { /* ... *\/ });
* test('test two', async () => { /* ... *\/ });
* test('test three', async () => { /* ... *\/ });
* });
* ```
*
* Timeout for the currently running test is available through
* [testInfo.timeout](https://playwright.dev/docs/api/class-testinfo#test-info-timeout).
* @param timeout Timeout in milliseconds.