codeceptjs 4.2.1-beta.3 → 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeceptjs",
3
- "version": "4.2.1-beta.3",
3
+ "version": "4.2.2",
4
4
  "type": "module",
5
5
  "description": "Supercharged End 2 End Testing Framework for NodeJS",
6
6
  "keywords": [
@@ -59,39 +59,37 @@
59
59
  "mock-server:stop": "kill -9 $(lsof -t -i:3001)",
60
60
  "test:with-mock-server": "npm run mock-server:start && npm test",
61
61
  "json-server:graphql": "node test/data/graphql/index.js",
62
- "lint": "eslint bin/ examples/ lib/ test/ translations/ runok.cjs",
63
- "lint-fix": "eslint bin/ examples/ lib/ test/ translations/ runok.cjs --fix",
64
- "prettier": "prettier --config prettier.config.js --write bin/**/*.js lib/**/*.js test/**/*.js translations/**/*.js runok.cjs",
65
- "docs": "./runok.cjs docs",
66
- "test:unit": "mocha test/unit --recursive --timeout 10000 --reporter @testomatio/reporter/mocha",
67
- "test:unit:windows": "mocha test/unit/container_test.js --recursive --timeout 10000 --reporter @testomatio/reporter/mocha",
68
- "test:rest": "mocha test/rest --recursive --timeout 20000 --reporter @testomatio/reporter/mocha",
69
- "test:runner": "mocha test/runner --recursive --timeout 10000 --reporter @testomatio/reporter/mocha",
62
+ "lint": "eslint bin/ examples/ lib/ test/ translations/ Bunoshfile.js",
63
+ "lint-fix": "eslint bin/ examples/ lib/ test/ translations/ Bunoshfile.js --fix",
64
+ "prettier": "prettier --config prettier.config.js --write bin/**/*.js lib/**/*.js test/**/*.js translations/**/*.js Bunoshfile.js",
65
+ "docs": "bunosh docs",
66
+ "test:unit": "mocha test/unit --recursive --timeout 10000",
67
+ "test:unit:windows": "mocha test/unit/container_test.js --recursive --timeout 10000",
68
+ "test:rest": "mocha test/rest --recursive --timeout 20000",
69
+ "test:runner": "mocha test/runner --recursive --timeout 10000",
70
70
  "test": "npm run test:unit && npm run test:rest && npm run test:runner",
71
- "test:appium-quick": "mocha test/helper/Appium_test.js --grep 'quick' --reporter @testomatio/reporter/mocha",
72
- "test:appium-other": "mocha test/helper/Appium_test.js --grep 'second' --reporter @testomatio/reporter/mocha",
73
- "test:ios:appium-quick": "mocha test/helper/Appium_ios_test.js --grep 'quick' --reporter @testomatio/reporter/mocha",
74
- "test:ios:appium-other": "mocha test/helper/Appium_ios_test.js --grep 'second' --reporter @testomatio/reporter/mocha",
71
+ "test:appium-quick": "mocha test/helper/Appium_test.js --grep 'quick'",
72
+ "test:appium-other": "mocha test/helper/Appium_test.js --grep 'second'",
73
+ "test:ios:appium-quick": "mocha test/helper/Appium_ios_test.js --grep 'quick'",
74
+ "test:ios:appium-other": "mocha test/helper/Appium_ios_test.js --grep 'second'",
75
75
  "test-app:start": "php -S 127.0.0.1:8000 -t test/data/app",
76
76
  "test-app:stop": "kill -9 $(lsof -t -i:8000)",
77
- "test:unit:webbapi:playwright": "mocha test/helper/Playwright_test.js --reporter @testomatio/reporter/mocha",
78
- "test:unit:webbapi:puppeteer": "mocha test/helper/Puppeteer_test.js --reporter @testomatio/reporter/mocha",
79
- "test:unit:webbapi:webDriver": "mocha test/helper/WebDriver_test.js --timeout 10000 --reporter @testomatio/reporter/mocha",
80
- "test:unit:webbapi:webDriver:noSeleniumServer": "mocha test/helper/WebDriver.noSeleniumServer_test.js --timeout 10000 --reporter @testomatio/reporter/mocha",
81
- "test:unit:webbapi:cdpbrowser": "mocha test/helper/CDPBrowser_chrome_test.js --timeout 30000 --reporter @testomatio/reporter/mocha",
82
- "test:unit:webbapi:obscura": "mocha test/helper/CDPBrowser_obscura_test.js --timeout 30000 --reporter @testomatio/reporter/mocha",
83
- "test:unit:webbapi:lightpanda": "mocha test/helper/CDPBrowser_lightpanda_test.js --timeout 30000 --reporter @testomatio/reporter/mocha",
84
- "test:unit:expect": "mocha test/helper/Expect_test.js --reporter @testomatio/reporter/mocha",
85
- "test:plugin": "mocha test/plugin/plugin_test.js --reporter @testomatio/reporter/mocha",
86
- "def": "./runok.cjs def",
77
+ "test:unit:webbapi:playwright": "mocha test/helper/Playwright_test.js",
78
+ "test:unit:webbapi:puppeteer": "mocha test/helper/Puppeteer_test.js",
79
+ "test:unit:webbapi:webDriver": "mocha test/helper/WebDriver_test.js --timeout 10000",
80
+ "test:unit:webbapi:webDriver:noSeleniumServer": "mocha test/helper/WebDriver.noSeleniumServer_test.js --timeout 10000",
81
+ "test:unit:webbapi:cdpbrowser": "mocha test/helper/CDPBrowser_chrome_test.js --timeout 30000",
82
+ "test:unit:webbapi:obscura": "mocha test/helper/CDPBrowser_obscura_test.js --timeout 30000",
83
+ "test:unit:webbapi:lightpanda": "mocha test/helper/CDPBrowser_lightpanda_test.js --timeout 30000",
84
+ "test:unit:webbapi:moli": "mocha test/helper/CDPBrowser_moli_test.js --timeout 30000",
85
+ "test:unit:expect": "mocha test/helper/Expect_test.js",
86
+ "test:plugin": "mocha test/plugin/plugin_test.js",
87
+ "def": "bunosh def",
87
88
  "dev:graphql": "node test/data/graphql/index.js",
88
- "publish:site": "./runok.cjs publish:site",
89
- "update-contributor-faces": "./runok.cjs contributor:faces",
89
+ "update-contributor-faces": "bunosh contributor:faces",
90
90
  "types-fix": "node typings/fixDefFiles.js",
91
91
  "dtslint": "npm run types-fix && tsd",
92
- "prepare": "husky install",
93
- "prepare-release": "./runok.cjs versioning && ./runok.cjs get:commit-log",
94
- "publish-beta": "./runok.cjs publish:next-beta-version"
92
+ "prepare": "husky install"
95
93
  },
96
94
  "dependencies": {
97
95
  "@codeceptjs/configure": "^4.0.0-beta.4",
@@ -100,11 +98,11 @@
100
98
  "@cucumber/gherkin": "38.0.0",
101
99
  "@cucumber/messages": "32.3.1",
102
100
  "@modelcontextprotocol/sdk": "^1.26.0",
103
- "@xmldom/xmldom": "0.9.10",
101
+ "@xmldom/xmldom": "^0.9.12",
104
102
  "acorn": "8.15.0",
105
103
  "ai": "7.0.132",
106
104
  "arrify": "3.0.0",
107
- "axios": "1.16.1",
105
+ "axios": "^1.20.0",
108
106
  "chalk": "4.1.2",
109
107
  "cheerio": "^1.0.0",
110
108
  "chokidar": "^5.0.0",
@@ -127,7 +125,7 @@
127
125
  "lodash.merge": "4.6.2",
128
126
  "lodash.shuffle": "4.2.0",
129
127
  "mkdirp": "3.0.1",
130
- "mocha": "11.7.5",
128
+ "mocha": "^12.0.3",
131
129
  "monocart-coverage-reports": "2.12.12",
132
130
  "ms": "2.1.3",
133
131
  "multer": "^2.0.2",
@@ -160,8 +158,8 @@
160
158
  "@wdio/sauce-service": "9.12.5",
161
159
  "@wdio/selenium-standalone-service": "8.15.0",
162
160
  "@wdio/utils": "9.23.3",
163
- "@xmldom/xmldom": "0.9.10",
164
- "bunosh": "latest",
161
+ "@xmldom/xmldom": "^0.9.12",
162
+ "bunosh": "^0.6.0",
165
163
  "chai": "^6.2.1",
166
164
  "chai-as-promised": "^8.0.2",
167
165
  "chai-subset": "1.6.0",
@@ -184,7 +182,6 @@
184
182
  "puppeteer": "24.36.0",
185
183
  "qrcode-terminal": "0.12.0",
186
184
  "rosie": "2.1.1",
187
- "runok": "^0.9.3",
188
185
  "semver": "7.7.3",
189
186
  "sinon": "22.0.0",
190
187
  "sinon-chai": "^4.0.1",
@@ -3495,6 +3495,112 @@ declare namespace CodeceptJS {
3495
3495
  class LightpandaTs {
3496
3496
  constructor(config: LightpandaConfig);
3497
3497
  }
3498
+ /**
3499
+ * ## Configuration
3500
+ *
3501
+ * This helper should be configured in codecept.conf.js
3502
+ * @property [endpoint] - explicit CDP endpoint. Setting this switches the helper to ATTACH
3503
+ * mode: it only connects, and never spawns or kills a process, no matter what else is configured.
3504
+ * Leave it unset for SELF-MANAGED mode (see below).
3505
+ * @property [binaryPath] - path to the `moli` executable, used in SELF-MANAGED mode
3506
+ * (`endpoint` unset). Checked before `MOLI_PATH` and `PATH`.
3507
+ * @property [port] - port `moli serve` listens on, in SELF-MANAGED mode. When unset, a free
3508
+ * port is picked automatically, which is what makes `run-workers` collision-free — every worker
3509
+ * gets its own instance on its own port with zero config.
3510
+ * @property [serverStartTimeout = 15000] - milliseconds to wait for a spawned `moli serve` to
3511
+ * answer `/json/version` before `_connect` gives up.
3512
+ */
3513
+ type MoliConfig = {
3514
+ endpoint?: string;
3515
+ binaryPath?: string;
3516
+ port?: number;
3517
+ serverStartTimeout?: number;
3518
+ };
3519
+ /**
3520
+ * Moli drives [Moli](https://github.com/lexmount/moli), an open-source headless browser written
3521
+ * in Rust for automation, exposed over the Chrome DevTools Protocol. It runs real JavaScript in V8
3522
+ * and computes styles with Servo's Stylo, but by default skips layout and painting: element boxes
3523
+ * use deterministic placeholder geometry, so there are no screenshots and no coordinate input.
3524
+ *
3525
+ * This helper is a thin `CDPBrowser` subclass: it changes nothing about how locating or acting on
3526
+ * elements works, it only pins the config presets Moli requires and manages the `moli serve`
3527
+ * process lifecycle, the same way Playwright manages its own browser process.
3528
+ *
3529
+ * > Moli support is experimental. Pin the browser version in CI and keep a
3530
+ * > Playwright/WebDriver job for browser-compatibility coverage.
3531
+ *
3532
+ * ## Modes
3533
+ *
3534
+ * - **ATTACH** — `endpoint` is set explicitly in the config. The helper only connects to it; it
3535
+ * never spawns or kills anything, no matter what `binaryPath`/`port` are set to.
3536
+ * - **SELF-LAUNCH** — `endpoint` is unset and a binary can be resolved, in order: `binaryPath` in
3537
+ * the config, then the `MOLI_PATH` environment variable, then `moli` on `PATH`. The helper
3538
+ * spawns `moli serve --host 127.0.0.1 --port <port>` (`port` from the config, or a free port
3539
+ * picked automatically), waits for it to answer, connects, and kills it in `_finishTest`.
3540
+ * - **COURTESY-ATTACH** — `endpoint` is unset and no binary can be resolved, but something already
3541
+ * answers `http://127.0.0.1:9222/json/version` (e.g. `moli serve` started by hand). The helper
3542
+ * attaches to it and never kills it. If neither a binary nor a running server on :9222 can be
3543
+ * found, the helper throws a loud, actionable error.
3544
+ *
3545
+ * ## Install
3546
+ *
3547
+ * Follow the [official installation instructions](https://github.com/lexmount/moli#direct-installation),
3548
+ * then put `moli` on your `PATH`, or point `binaryPath`/`MOLI_PATH` at it. The helper then
3549
+ * launches and tears it down automatically.
3550
+ *
3551
+ * ## Config presets
3552
+ *
3553
+ * These are set automatically and only need overriding for unusual setups:
3554
+ *
3555
+ * | option | value | why |
3556
+ * | --- | --- | --- |
3557
+ * | `input` | `synthetic` | without layout Moli rejects coordinate mouse input, so `click` always takes the `forceClick` path |
3558
+ * | `xpathPolyfill` | `auto` | probed per binary/page |
3559
+ * | `capabilities.layout` | `real` | Moli computes real styles and gives displayed elements a non-empty placeholder box, which is enough for `seeElement` and the `waitForVisible` family; it is pinned because the runtime probe would also enable coordinate input |
3560
+ * | `capabilities.screenshot` | `false` | screenshots require `moli serve --layout`, which this helper does not use: its layout is a snapshot that goes stale when the page changes |
3561
+ *
3562
+ * ## Limitations
3563
+ *
3564
+ * - No screenshots and no screencast: `saveScreenshot` and `saveElementScreenshot` do nothing (a debug message is printed).
3565
+ * - No coordinate-based input (`clickXY`).
3566
+ * - No frames or popups.
3567
+ * - Uploaded files are sent as `application/octet-stream` regardless of their extension.
3568
+ * - The default stylesheet does not color links: `a` computes `color: rgb(0, 0, 0)`.
3569
+ *
3570
+ * <!-- configuration -->
3571
+ *
3572
+ * ## Example
3573
+ *
3574
+ * ```js
3575
+ * // inside codecept.conf.js — SELF-LAUNCH mode (recommended): the helper finds/starts/stops
3576
+ * // moli serve on its own, on a free port. Ideal for run-workers: every worker gets its own
3577
+ * // instance with no config.
3578
+ * {
3579
+ * helpers: {
3580
+ * Moli: {
3581
+ * url: 'http://localhost',
3582
+ * }
3583
+ * }
3584
+ * }
3585
+ * ```
3586
+ *
3587
+ * ```js
3588
+ * // ATTACH mode — connect to a Moli instance you manage yourself (remote host, container, etc.)
3589
+ * {
3590
+ * helpers: {
3591
+ * Moli: {
3592
+ * url: 'http://localhost',
3593
+ * endpoint: 'http://127.0.0.1:9222',
3594
+ * }
3595
+ * }
3596
+ * }
3597
+ * ```
3598
+ *
3599
+ * ## Methods
3600
+ */
3601
+ class MoliTs {
3602
+ constructor(config: MoliConfig);
3603
+ }
3498
3604
  /**
3499
3605
  * ## Configuration
3500
3606
  *
@@ -3598,6 +3598,112 @@ declare namespace CodeceptJS {
3598
3598
  class Lightpanda {
3599
3599
  constructor(config: LightpandaConfig);
3600
3600
  }
3601
+ /**
3602
+ * ## Configuration
3603
+ *
3604
+ * This helper should be configured in codecept.conf.js
3605
+ * @property [endpoint] - explicit CDP endpoint. Setting this switches the helper to ATTACH
3606
+ * mode: it only connects, and never spawns or kills a process, no matter what else is configured.
3607
+ * Leave it unset for SELF-MANAGED mode (see below).
3608
+ * @property [binaryPath] - path to the `moli` executable, used in SELF-MANAGED mode
3609
+ * (`endpoint` unset). Checked before `MOLI_PATH` and `PATH`.
3610
+ * @property [port] - port `moli serve` listens on, in SELF-MANAGED mode. When unset, a free
3611
+ * port is picked automatically, which is what makes `run-workers` collision-free — every worker
3612
+ * gets its own instance on its own port with zero config.
3613
+ * @property [serverStartTimeout = 15000] - milliseconds to wait for a spawned `moli serve` to
3614
+ * answer `/json/version` before `_connect` gives up.
3615
+ */
3616
+ type MoliConfig = {
3617
+ endpoint?: string;
3618
+ binaryPath?: string;
3619
+ port?: number;
3620
+ serverStartTimeout?: number;
3621
+ };
3622
+ /**
3623
+ * Moli drives [Moli](https://github.com/lexmount/moli), an open-source headless browser written
3624
+ * in Rust for automation, exposed over the Chrome DevTools Protocol. It runs real JavaScript in V8
3625
+ * and computes styles with Servo's Stylo, but by default skips layout and painting: element boxes
3626
+ * use deterministic placeholder geometry, so there are no screenshots and no coordinate input.
3627
+ *
3628
+ * This helper is a thin `CDPBrowser` subclass: it changes nothing about how locating or acting on
3629
+ * elements works, it only pins the config presets Moli requires and manages the `moli serve`
3630
+ * process lifecycle, the same way Playwright manages its own browser process.
3631
+ *
3632
+ * > Moli support is experimental. Pin the browser version in CI and keep a
3633
+ * > Playwright/WebDriver job for browser-compatibility coverage.
3634
+ *
3635
+ * ## Modes
3636
+ *
3637
+ * - **ATTACH** — `endpoint` is set explicitly in the config. The helper only connects to it; it
3638
+ * never spawns or kills anything, no matter what `binaryPath`/`port` are set to.
3639
+ * - **SELF-LAUNCH** — `endpoint` is unset and a binary can be resolved, in order: `binaryPath` in
3640
+ * the config, then the `MOLI_PATH` environment variable, then `moli` on `PATH`. The helper
3641
+ * spawns `moli serve --host 127.0.0.1 --port <port>` (`port` from the config, or a free port
3642
+ * picked automatically), waits for it to answer, connects, and kills it in `_finishTest`.
3643
+ * - **COURTESY-ATTACH** — `endpoint` is unset and no binary can be resolved, but something already
3644
+ * answers `http://127.0.0.1:9222/json/version` (e.g. `moli serve` started by hand). The helper
3645
+ * attaches to it and never kills it. If neither a binary nor a running server on :9222 can be
3646
+ * found, the helper throws a loud, actionable error.
3647
+ *
3648
+ * ## Install
3649
+ *
3650
+ * Follow the [official installation instructions](https://github.com/lexmount/moli#direct-installation),
3651
+ * then put `moli` on your `PATH`, or point `binaryPath`/`MOLI_PATH` at it. The helper then
3652
+ * launches and tears it down automatically.
3653
+ *
3654
+ * ## Config presets
3655
+ *
3656
+ * These are set automatically and only need overriding for unusual setups:
3657
+ *
3658
+ * | option | value | why |
3659
+ * | --- | --- | --- |
3660
+ * | `input` | `synthetic` | without layout Moli rejects coordinate mouse input, so `click` always takes the `forceClick` path |
3661
+ * | `xpathPolyfill` | `auto` | probed per binary/page |
3662
+ * | `capabilities.layout` | `real` | Moli computes real styles and gives displayed elements a non-empty placeholder box, which is enough for `seeElement` and the `waitForVisible` family; it is pinned because the runtime probe would also enable coordinate input |
3663
+ * | `capabilities.screenshot` | `false` | screenshots require `moli serve --layout`, which this helper does not use: its layout is a snapshot that goes stale when the page changes |
3664
+ *
3665
+ * ## Limitations
3666
+ *
3667
+ * - No screenshots and no screencast: `saveScreenshot` and `saveElementScreenshot` do nothing (a debug message is printed).
3668
+ * - No coordinate-based input (`clickXY`).
3669
+ * - No frames or popups.
3670
+ * - Uploaded files are sent as `application/octet-stream` regardless of their extension.
3671
+ * - The default stylesheet does not color links: `a` computes `color: rgb(0, 0, 0)`.
3672
+ *
3673
+ * <!-- configuration -->
3674
+ *
3675
+ * ## Example
3676
+ *
3677
+ * ```js
3678
+ * // inside codecept.conf.js — SELF-LAUNCH mode (recommended): the helper finds/starts/stops
3679
+ * // moli serve on its own, on a free port. Ideal for run-workers: every worker gets its own
3680
+ * // instance with no config.
3681
+ * {
3682
+ * helpers: {
3683
+ * Moli: {
3684
+ * url: 'http://localhost',
3685
+ * }
3686
+ * }
3687
+ * }
3688
+ * ```
3689
+ *
3690
+ * ```js
3691
+ * // ATTACH mode — connect to a Moli instance you manage yourself (remote host, container, etc.)
3692
+ * {
3693
+ * helpers: {
3694
+ * Moli: {
3695
+ * url: 'http://localhost',
3696
+ * endpoint: 'http://127.0.0.1:9222',
3697
+ * }
3698
+ * }
3699
+ * }
3700
+ * ```
3701
+ *
3702
+ * ## Methods
3703
+ */
3704
+ class Moli {
3705
+ constructor(config: MoliConfig);
3706
+ }
3601
3707
  /**
3602
3708
  * ## Configuration
3603
3709
  *