codeceptjs / codeceptjs/CodeceptJS

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

Đang mở
#5,304 4 bình luận 9 reaction 1 người được giao Được @DenysKuchma nhận Xem trên GitHub
stale
Ngôn ngữ chính
JavaScript
Star
4.2k
Fork
757
Merge trung bình
2 ngày 9 giờ
Pull request đã merge (30 ngày)
16

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.