codeceptjs / codeceptjs/CodeceptJS

Feature config override (specifically 'restart') causes process to hang after suite

Abierto
#5,304 4 comentarios 9 reacciones 1 asignado Reclamado por @DenysKuchma Ver en GitHub
stale
Lenguaje dominante
JavaScript
Estrellas
4.2k
Forks
757
Merge medio
2 d 9 h
PR fusionados (30 d)
16

Descripción

### Description
We have a codebase where for all of the tests, we have `restart` set as `false` inside of `codecept.conf.js`. However we have 1 Feature where we would like to have `restart` set to `session`/`keep`. The problem is that when overriding config on the feature with
```
Feature('blabla').config({ restart: 'session' })
```
we run into the problem that suite hangs up after it completes, leaving browser open and just never finishing. This causes it to label it as failed due to timeout on our CI pipeline.

This problem does not occur if `restart: 'session'` is set in `codecept.conf.js`. Setting `config` on each Scenario also doesn't work, because config gets reverted between them, which causes the browser to close after first Scenario and not reopening for the second one.

### How it should work
After the suite completes, codecept process shuts down as expected.

### Example

codecept.conf.js:
```
const { setHeadlessWhen, setCommonPlugins } = require('@codeceptjs/configure')
// turn on headless mode when running with HEADLESS=true environment variable
// export HEADLESS=true && npx codeceptjs run
setHeadlessWhen(process.env.HEADLESS)

// enable all common plugins https://github.com/codeceptjs/configure#setcommonplugins
setCommonPlugins()

/** @type {CodeceptJS.MainConfig} */
exports.config = {
tests: './*_test.js',
output: './output',
helpers: {
Playwright: {
browser: 'chromium',
url: 'http://google.com',
show: true,
keepBrowserState: false, // No influence when restart: true
keepCookies: false, // No influence when restart: true
restart: true
},
FileSystem: {}
},
name: 'ccjs'
}
```

Suite:
```
Feature('Config hangs').config({
restart: 'session'
})

Scenario('do something 1', ({ I }) => {
I.amOnPage('https://codecept.io/quickstart/')
})

Scenario('do something 2', ({ I }) => {
I.waitForText('Quickstart')
})

Scenario('do something 3', ({ I }) => {
I.see('If you prefer not to use Playwright')
})
```

Output:
```
~hxllv~ ~/ccjs npx codeceptjs run featureConfigHang.js --verbose
***************************************
nodeInfo: 23.6.0
osInfo: macOS 15.7.1
cpuInfo: (16) arm64 Apple M3 Max
chromeInfo: 142.0.7444.162
edgeInfo: Not Found
firefoxInfo: undefined
safariInfo: 26.0.1
If you need more detailed info, just run this: npx codeceptjs info
***************************************
CodeceptJS v3.6.7 #StandWithUkraine
Using test root "/Users/xx/ccjs"
Helpers: Playwright, FileSystem
Plugins: screenshotOnFail, tryTo, retryFailedStep, retryTo, eachElement

Config hangs --
[1] Starting recording promises
› [Suite Config] Playwright {"restart":"session"}
Timeouts:
› [Session] Starting singleton browser session
do something 1
› [Dir] /Users/xx/ccjs
I am on page "https://codecept.io/quickstart/"
✔ OK in 1827ms

› [Session] cleaning cookies and localStorage
do something 2
› [Dir] /Users/xx/ccjs
I wait for text "Quickstart"
✔ OK in 5ms

› [Session] cleaning cookies and localStorage
do something 3
› [Dir] /Users/xx/ccjs
I see "If you prefer not to use Playwright"
✔ OK in 15ms

› [Session] cleaning cookies and localStorage
› [Suite Config] Reverted for Playwright

OK | 3 passed // 3s <- hangs here
```

Expected output:
```
~hxllv~ ~/ccjs npx codeceptjs run featureConfigHang.js --verbose
***************************************
nodeInfo: 23.6.0
osInfo: macOS 15.7.1
cpuInfo: (16) arm64 Apple M3 Max
chromeInfo: 142.0.7444.162
edgeInfo: Not Found
firefoxInfo: undefined
safariInfo: 26.0.1
If you need more detailed info, just run this: npx codeceptjs info
***************************************
CodeceptJS v3.6.7 #StandWithUkraine
Using test root "/Users/xx/ccjs"
Helpers: Playwright, FileSystem
Plugins: screenshotOnFail, tryTo, retryFailedStep, retryTo, eachElement

Config hangs --
[1] Starting recording promises
Timeouts:
› [Session] Starting singleton browser session
do something 1
› [Dir] /Users/xx/ccjs
I am on page "https://codecept.io/quickstart/"
✔ OK in 1648ms

› [Session] cleaning cookies and localStorage
do something 2
› [Dir] /Users/xx/ccjs
I wait for text "Quickstart"
✔ OK in 8ms

› [Session] cleaning cookies and localStorage
do something 3
› [Dir] /Users/xx/ccjs
I see "If you prefer not to use Playwright"
✔ OK in 3ms

› [Session] cleaning cookies and localStorage

OK | 3 passed // 2s
~hxllv~ ~/ccjs <- back in control of terminal
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.