codeceptjs / codeceptjs/CodeceptJS

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

Aberta
#5,304 4 comentários 9 reações 1 responsável Reivindicada por @DenysKuchma Ver no GitHub
stale
Linguagem predominante
JavaScript
Estrelas
4.2k
Forks
757
Merge médio
2d 9h
PRs com merge (30d)
16

Descrição

### 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
```

Guia de contribuição

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.