codeceptjs 4.0.0-rc.2 → 4.0.0-rc.20
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/README.md +39 -27
- package/bin/codecept.js +15 -2
- package/bin/codeceptq.js +49 -0
- package/bin/mcp-server.js +1187 -0
- package/docs/advanced.md +201 -0
- package/docs/agents.md +159 -0
- package/docs/ai.md +537 -0
- package/docs/aitrace.md +266 -0
- package/docs/api.md +332 -0
- package/docs/assertions.md +415 -0
- package/docs/auth.md +318 -0
- package/docs/basics.md +424 -0
- package/docs/bdd.md +539 -0
- package/docs/best.md +240 -0
- package/docs/bootstrap.md +132 -0
- package/docs/commands.md +352 -0
- package/docs/community-helpers.md +63 -0
- package/docs/configuration.md +230 -0
- package/docs/continuous-integration.md +497 -0
- package/docs/custom-helpers.md +297 -0
- package/docs/data.md +448 -0
- package/docs/debugging.md +332 -0
- package/docs/detox.md +235 -0
- package/docs/docker.md +136 -0
- package/docs/effects.md +179 -0
- package/docs/element-based-testing.md +295 -0
- package/docs/element-selection.md +125 -0
- package/docs/els.md +328 -0
- package/docs/examples.md +161 -0
- package/docs/heal.md +213 -0
- package/docs/helpers/ApiDataFactory.md +267 -0
- package/docs/helpers/Appium.md +1405 -0
- package/docs/helpers/Detox.md +665 -0
- package/docs/helpers/ExpectHelper.md +275 -0
- package/docs/helpers/FileSystem.md +152 -0
- package/docs/helpers/GraphQL.md +152 -0
- package/docs/helpers/GraphQLDataFactory.md +226 -0
- package/docs/helpers/JSONResponse.md +255 -0
- package/docs/helpers/Mochawesome.md +8 -0
- package/docs/helpers/MockRequest.md +377 -0
- package/docs/helpers/MockServer.md +212 -0
- package/docs/helpers/Playwright.md +2969 -0
- package/docs/helpers/Polly.md +44 -0
- package/docs/helpers/Protractor.md +1769 -0
- package/docs/helpers/Puppeteer-firefox.md +86 -0
- package/docs/helpers/Puppeteer.md +2690 -0
- package/docs/helpers/REST.md +289 -0
- package/docs/helpers/SoftExpectHelper.md +352 -0
- package/docs/helpers/WebDriver.md +2682 -0
- package/docs/hooks.md +339 -0
- package/docs/index.md +111 -0
- package/docs/installation.md +83 -0
- package/docs/internal-api.md +265 -0
- package/docs/internal-test-server.md +89 -0
- package/docs/locators.md +355 -0
- package/docs/mcp.md +485 -0
- package/docs/migration-4.md +556 -0
- package/docs/mobile.md +338 -0
- package/docs/pageobjects.md +399 -0
- package/docs/parallel.md +585 -0
- package/docs/playwright.md +714 -0
- package/docs/plugins.md +866 -0
- package/docs/puppeteer.md +314 -0
- package/docs/quickstart.md +120 -0
- package/docs/react.md +70 -0
- package/docs/reports.md +483 -0
- package/docs/retry.md +274 -0
- package/docs/secrets.md +150 -0
- package/docs/sessions.md +80 -0
- package/docs/shadow.md +68 -0
- package/docs/test-structure.md +275 -0
- package/docs/timeouts.md +183 -0
- package/docs/translation.md +247 -0
- package/docs/tutorial.md +271 -0
- package/docs/typescript.md +374 -0
- package/docs/web-element.md +251 -0
- package/docs/webdriver.md +708 -0
- package/docs/within.md +55 -0
- package/lib/ai.js +3 -2
- package/lib/aria.js +260 -0
- package/lib/assertions.js +18 -0
- package/lib/codecept.js +26 -23
- package/lib/command/check.js +2 -1
- package/lib/command/dryRun.js +24 -5
- package/lib/command/generate.js +2 -0
- package/lib/command/gherkin/snippets.js +5 -4
- package/lib/command/init.js +248 -269
- package/lib/command/list.js +150 -10
- package/lib/command/query.js +218 -0
- package/lib/command/run-multiple.js +2 -0
- package/lib/command/run-workers.js +2 -0
- package/lib/command/run.js +1 -1
- package/lib/command/workers/runTests.js +10 -10
- package/lib/config.js +77 -4
- package/lib/container.js +114 -17
- package/lib/effects.js +17 -0
- package/lib/element/WebElement.js +246 -2
- package/lib/els.js +12 -6
- package/lib/globals.js +32 -19
- package/lib/heal.js +4 -3
- package/lib/helper/ApiDataFactory.js +2 -1
- package/lib/helper/Appium.js +8 -8
- package/lib/helper/FileSystem.js +3 -2
- package/lib/helper/GraphQLDataFactory.js +2 -1
- package/lib/helper/Playwright.js +228 -162
- package/lib/helper/Puppeteer.js +208 -76
- package/lib/helper/WebDriver.js +173 -68
- package/lib/helper/errors/MultipleElementsFound.js +27 -110
- package/lib/helper/errors/NonFocusedType.js +8 -0
- package/lib/helper/extras/Download.js +45 -0
- package/lib/helper/extras/PlaywrightReactVueLocator.js +45 -36
- package/lib/helper/extras/elementSelection.js +58 -0
- package/lib/helper/extras/focusCheck.js +43 -0
- package/lib/helper/extras/richTextEditor.js +178 -0
- package/lib/helper/scripts/dropFile.js +11 -0
- package/lib/history.js +3 -2
- package/lib/html.js +103 -16
- package/lib/index.js +9 -1
- package/lib/listener/config.js +6 -4
- package/lib/listener/emptyRun.js +2 -1
- package/lib/listener/globalRetry.js +32 -6
- package/lib/listener/helpers.js +4 -1
- package/lib/listener/mocha.js +2 -1
- package/lib/listener/pageobjects.js +43 -0
- package/lib/listener/result.js +3 -2
- package/lib/locator.js +126 -3
- package/lib/mocha/cli.js +14 -2
- package/lib/mocha/factory.js +7 -2
- package/lib/mocha/inject.js +1 -1
- package/lib/mocha/scenarioConfig.js +2 -1
- package/lib/mocha/ui.js +5 -6
- package/lib/parser.js +2 -2
- package/lib/pause.js +38 -4
- package/lib/plugin/aiTrace.js +453 -0
- package/lib/plugin/analyze.js +1 -1
- package/lib/plugin/auth.js +3 -3
- package/lib/plugin/browser.js +77 -0
- package/lib/plugin/expose.js +159 -0
- package/lib/plugin/heal.js +44 -1
- package/lib/plugin/pageInfo.js +53 -49
- package/lib/plugin/pause.js +131 -0
- package/lib/plugin/pauseOnFail.js +10 -34
- package/lib/plugin/retryFailedStep.js +28 -19
- package/lib/plugin/screencast.js +287 -0
- package/lib/plugin/screenshot.js +563 -0
- package/lib/plugin/screenshotOnFail.js +8 -171
- package/lib/rerun.js +2 -1
- package/lib/result.js +2 -1
- package/lib/step/base.js +3 -2
- package/lib/step/config.js +15 -2
- package/lib/step/record.js +2 -2
- package/lib/store.js +72 -3
- package/lib/translation.js +2 -1
- package/lib/utils/mask_data.js +2 -1
- package/lib/utils/pluginParser.js +151 -0
- package/lib/utils/trace.js +297 -0
- package/lib/utils.js +77 -3
- package/lib/workers.js +52 -22
- package/package.json +19 -13
- package/typings/index.d.ts +19 -5
- package/docs/webapi/amOnPage.mustache +0 -11
- package/docs/webapi/appendField.mustache +0 -11
- package/docs/webapi/attachFile.mustache +0 -12
- package/docs/webapi/blur.mustache +0 -18
- package/docs/webapi/checkOption.mustache +0 -13
- package/docs/webapi/clearCookie.mustache +0 -9
- package/docs/webapi/clearField.mustache +0 -9
- package/docs/webapi/click.mustache +0 -29
- package/docs/webapi/clickLink.mustache +0 -8
- package/docs/webapi/closeCurrentTab.mustache +0 -7
- package/docs/webapi/closeOtherTabs.mustache +0 -8
- package/docs/webapi/dontSee.mustache +0 -11
- package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
- package/docs/webapi/dontSeeCookie.mustache +0 -8
- package/docs/webapi/dontSeeCurrentPathEquals.mustache +0 -10
- package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
- package/docs/webapi/dontSeeElement.mustache +0 -8
- package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
- package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
- package/docs/webapi/dontSeeInField.mustache +0 -11
- package/docs/webapi/dontSeeInSource.mustache +0 -8
- package/docs/webapi/dontSeeInTitle.mustache +0 -8
- package/docs/webapi/dontSeeTraffic.mustache +0 -13
- package/docs/webapi/doubleClick.mustache +0 -13
- package/docs/webapi/downloadFile.mustache +0 -12
- package/docs/webapi/dragAndDrop.mustache +0 -9
- package/docs/webapi/dragSlider.mustache +0 -11
- package/docs/webapi/executeAsyncScript.mustache +0 -24
- package/docs/webapi/executeScript.mustache +0 -26
- package/docs/webapi/fillField.mustache +0 -16
- package/docs/webapi/flushNetworkTraffics.mustache +0 -5
- package/docs/webapi/focus.mustache +0 -13
- package/docs/webapi/forceClick.mustache +0 -28
- package/docs/webapi/forceRightClick.mustache +0 -18
- package/docs/webapi/grabAllWindowHandles.mustache +0 -7
- package/docs/webapi/grabAttributeFrom.mustache +0 -10
- package/docs/webapi/grabAttributeFromAll.mustache +0 -9
- package/docs/webapi/grabBrowserLogs.mustache +0 -9
- package/docs/webapi/grabCookie.mustache +0 -11
- package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
- package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
- package/docs/webapi/grabCurrentUrl.mustache +0 -9
- package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
- package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
- package/docs/webapi/grabElementBoundingRect.mustache +0 -20
- package/docs/webapi/grabGeoLocation.mustache +0 -8
- package/docs/webapi/grabHTMLFrom.mustache +0 -10
- package/docs/webapi/grabHTMLFromAll.mustache +0 -9
- package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
- package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
- package/docs/webapi/grabPageScrollPosition.mustache +0 -8
- package/docs/webapi/grabPopupText.mustache +0 -5
- package/docs/webapi/grabRecordedNetworkTraffics.mustache +0 -10
- package/docs/webapi/grabSource.mustache +0 -8
- package/docs/webapi/grabTextFrom.mustache +0 -10
- package/docs/webapi/grabTextFromAll.mustache +0 -9
- package/docs/webapi/grabTitle.mustache +0 -8
- package/docs/webapi/grabValueFrom.mustache +0 -9
- package/docs/webapi/grabValueFromAll.mustache +0 -8
- package/docs/webapi/grabWebElement.mustache +0 -9
- package/docs/webapi/grabWebElements.mustache +0 -9
- package/docs/webapi/moveCursorTo.mustache +0 -12
- package/docs/webapi/openNewTab.mustache +0 -7
- package/docs/webapi/pressKey.mustache +0 -12
- package/docs/webapi/pressKeyDown.mustache +0 -12
- package/docs/webapi/pressKeyUp.mustache +0 -12
- package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
- package/docs/webapi/refreshPage.mustache +0 -6
- package/docs/webapi/resizeWindow.mustache +0 -6
- package/docs/webapi/rightClick.mustache +0 -14
- package/docs/webapi/saveElementScreenshot.mustache +0 -10
- package/docs/webapi/saveScreenshot.mustache +0 -12
- package/docs/webapi/say.mustache +0 -10
- package/docs/webapi/scrollIntoView.mustache +0 -11
- package/docs/webapi/scrollPageToBottom.mustache +0 -6
- package/docs/webapi/scrollPageToTop.mustache +0 -6
- package/docs/webapi/scrollTo.mustache +0 -12
- package/docs/webapi/see.mustache +0 -11
- package/docs/webapi/seeAttributesOnElements.mustache +0 -9
- package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
- package/docs/webapi/seeCookie.mustache +0 -8
- package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
- package/docs/webapi/seeCurrentPathEquals.mustache +0 -10
- package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
- package/docs/webapi/seeElement.mustache +0 -8
- package/docs/webapi/seeElementInDOM.mustache +0 -8
- package/docs/webapi/seeInCurrentUrl.mustache +0 -8
- package/docs/webapi/seeInField.mustache +0 -12
- package/docs/webapi/seeInPopup.mustache +0 -8
- package/docs/webapi/seeInSource.mustache +0 -7
- package/docs/webapi/seeInTitle.mustache +0 -8
- package/docs/webapi/seeNumberOfElements.mustache +0 -11
- package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
- package/docs/webapi/seeTextEquals.mustache +0 -9
- package/docs/webapi/seeTitleEquals.mustache +0 -8
- package/docs/webapi/seeTraffic.mustache +0 -36
- package/docs/webapi/selectOption.mustache +0 -21
- package/docs/webapi/setCookie.mustache +0 -16
- package/docs/webapi/setGeoLocation.mustache +0 -12
- package/docs/webapi/startRecordingTraffic.mustache +0 -8
- package/docs/webapi/startRecordingWebSocketMessages.mustache +0 -8
- package/docs/webapi/stopRecordingTraffic.mustache +0 -5
- package/docs/webapi/stopRecordingWebSocketMessages.mustache +0 -7
- package/docs/webapi/switchTo.mustache +0 -9
- package/docs/webapi/switchToNextTab.mustache +0 -10
- package/docs/webapi/switchToPreviousTab.mustache +0 -10
- package/docs/webapi/type.mustache +0 -21
- package/docs/webapi/uncheckOption.mustache +0 -13
- package/docs/webapi/wait.mustache +0 -8
- package/docs/webapi/waitForClickable.mustache +0 -11
- package/docs/webapi/waitForCookie.mustache +0 -9
- package/docs/webapi/waitForDetached.mustache +0 -10
- package/docs/webapi/waitForDisabled.mustache +0 -6
- package/docs/webapi/waitForElement.mustache +0 -11
- package/docs/webapi/waitForEnabled.mustache +0 -6
- package/docs/webapi/waitForFunction.mustache +0 -17
- package/docs/webapi/waitForInvisible.mustache +0 -10
- package/docs/webapi/waitForNumberOfTabs.mustache +0 -9
- package/docs/webapi/waitForText.mustache +0 -13
- package/docs/webapi/waitForValue.mustache +0 -10
- package/docs/webapi/waitForVisible.mustache +0 -10
- package/docs/webapi/waitInUrl.mustache +0 -9
- package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
- package/docs/webapi/waitToHide.mustache +0 -10
- package/docs/webapi/waitUrlEquals.mustache +0 -10
- package/lib/helper/AI.js +0 -214
- package/lib/listener/enhancedGlobalRetry.js +0 -110
- package/lib/plugin/enhancedRetryFailedStep.js +0 -99
- package/lib/plugin/htmlReporter.js +0 -3648
- package/lib/plugin/stepByStepReport.js +0 -427
- package/lib/plugin/subtitles.js +0 -89
- package/lib/retryCoordinator.js +0 -207
- package/typings/promiseBasedTypes.d.ts +0 -9469
- package/typings/types.d.ts +0 -11402
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
---
|
|
2
|
+
permalink: /internal-api
|
|
3
|
+
title: Internal API
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Concepts
|
|
7
|
+
|
|
8
|
+
In this guide we will overview the internal API of CodeceptJS.
|
|
9
|
+
This knowledge is required for customization, writing plugins, etc.
|
|
10
|
+
|
|
11
|
+
CodeceptJS exposes its internal API as named exports of the `codeceptjs` package. Import only what you need:
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import { recorder, event, output, container, config } from 'codeceptjs'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
> Older code may have relied on a global `codeceptjs` object (`const { recorder } = codeceptjs`). That global only exists under `noGlobals: false` (the deprecated 3.x default) — prefer named imports.
|
|
18
|
+
|
|
19
|
+
These internal objects are available:
|
|
20
|
+
|
|
21
|
+
* [`codecept`](https://github.com/Codeception/CodeceptJS/blob/master/lib/codecept.js): test runner class
|
|
22
|
+
* [`config`](https://github.com/Codeception/CodeceptJS/blob/master/lib/config.js): current codecept config
|
|
23
|
+
* [`event`](https://github.com/Codeception/CodeceptJS/blob/master/lib/event.js): event listener
|
|
24
|
+
* [`recorder`](https://github.com/Codeception/CodeceptJS/blob/master/lib/recorder.js): global promise chain
|
|
25
|
+
* [`output`](https://github.com/Codeception/CodeceptJS/blob/master/lib/output.js): internal printer
|
|
26
|
+
* [`container`](https://github.com/Codeception/CodeceptJS/blob/master/lib/container.js): dependency injection container for tests, includes current helpers and support objects
|
|
27
|
+
* [`helper`](https://github.com/Codeception/CodeceptJS/blob/master/lib/helper.js): basic helper class
|
|
28
|
+
* [`actor`](https://github.com/Codeception/CodeceptJS/blob/master/lib/actor.js): basic actor (I) class
|
|
29
|
+
|
|
30
|
+
[API reference](https://github.com/Codeception/CodeceptJS/tree/master/docs/api) is available on GitHub.
|
|
31
|
+
Also please check the source code of corresponding modules.
|
|
32
|
+
|
|
33
|
+
### Container
|
|
34
|
+
|
|
35
|
+
CodeceptJS has a dependency injection container with helpers and support objects.
|
|
36
|
+
They can be retrieved from the container:
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
import { container } from 'codeceptjs';
|
|
40
|
+
|
|
41
|
+
// get object with all helpers
|
|
42
|
+
const helpers = container.helpers();
|
|
43
|
+
|
|
44
|
+
// get helper by name
|
|
45
|
+
const { WebDriver } = container.helpers();
|
|
46
|
+
|
|
47
|
+
// get support objects
|
|
48
|
+
const supportObjects = container.support();
|
|
49
|
+
|
|
50
|
+
// get support object by name
|
|
51
|
+
const { UserPage } = container.support();
|
|
52
|
+
|
|
53
|
+
// get all registered plugins
|
|
54
|
+
const plugins = container.plugins();
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
New objects can also be added to container in runtime:
|
|
58
|
+
|
|
59
|
+
```js
|
|
60
|
+
import { container } from 'codeceptjs';
|
|
61
|
+
import UserPage from './pages/user.js';
|
|
62
|
+
|
|
63
|
+
container.append({
|
|
64
|
+
helpers: { // add helper
|
|
65
|
+
MyHelper: new MyHelper({ config1: 'val1' });
|
|
66
|
+
},
|
|
67
|
+
support: { // add page object
|
|
68
|
+
UserPage,
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
> Use this trick to define custom objects inside `boostrap` script
|
|
74
|
+
|
|
75
|
+
The container also contains the current Mocha instance:
|
|
76
|
+
|
|
77
|
+
```js
|
|
78
|
+
const mocha = container.mocha();
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Event Listeners
|
|
82
|
+
|
|
83
|
+
CodeceptJS provides a module with an [event dispatcher and set of predefined events](https://github.com/Codeception/CodeceptJS/blob/master/lib/event.js).
|
|
84
|
+
|
|
85
|
+
It can be required from codeceptjs package if it is installed locally.
|
|
86
|
+
|
|
87
|
+
```js
|
|
88
|
+
import { event } from 'codeceptjs';
|
|
89
|
+
|
|
90
|
+
export default function() {
|
|
91
|
+
|
|
92
|
+
event.dispatcher.on(event.test.before, function (test) {
|
|
93
|
+
|
|
94
|
+
console.log('--- I am before test --');
|
|
95
|
+
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Available events:
|
|
101
|
+
|
|
102
|
+
* `event.test.before(test)` - *async* when `Before` hooks from helpers and from test is executed
|
|
103
|
+
* `event.test.after(test)` - *async* after each test
|
|
104
|
+
* `event.test.started(test)` - *sync* at the very beginning of a test.
|
|
105
|
+
* `event.test.passed(test)` - *sync* when test passed
|
|
106
|
+
* `event.test.failed(test, error)` - *sync* when test failed
|
|
107
|
+
* `event.test.finished(test)` - *sync* when test finished
|
|
108
|
+
* `event.suite.before(suite)` - *async* before a suite
|
|
109
|
+
* `event.suite.after(suite)` - *async* after a suite
|
|
110
|
+
* `event.step.before(step)` - *async* when the step is scheduled for execution
|
|
111
|
+
* `event.step.after(step)`- *async* after a step
|
|
112
|
+
* `event.step.started(step)` - *sync* when step starts.
|
|
113
|
+
* `event.step.passed(step)` - *sync* when step passed.
|
|
114
|
+
* `event.step.failed(step, err)` - *sync* when step failed.
|
|
115
|
+
* `event.step.finished(step)` - *sync* when step finishes.
|
|
116
|
+
* `event.step.comment(step)` - *sync* fired for comments like `I.say`.
|
|
117
|
+
* `event.all.before` - before running tests
|
|
118
|
+
* `event.all.after` - after running tests
|
|
119
|
+
* `event.all.result` - when results are printed
|
|
120
|
+
* `event.workers.before` - before spawning workers in parallel run
|
|
121
|
+
* `event.workers.after` - after workers finished in parallel run
|
|
122
|
+
* `event.workers.result` - test results after workers finished in parallel run
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
> *sync* - means that event is fired in the moment of the action happening.
|
|
126
|
+
*async* - means that event is fired when an action is scheduled. Use `recorder` to schedule your actions.
|
|
127
|
+
|
|
128
|
+
For further reference look for [currently available listeners](https://github.com/Codeception/CodeceptJS/tree/master/lib/listener) using the event system.
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
### Recorder
|
|
132
|
+
|
|
133
|
+
To inject asynchronous functions in a test or before/after a test you can subscribe to corresponding event and register a function inside a recorder object. [Recorder](https://github.com/Codeception/CodeceptJS/blob/master/lib/recorder.js) represents a global promises chain.
|
|
134
|
+
|
|
135
|
+
Provide a function in the first parameter, a function must be async or must return a promise:
|
|
136
|
+
|
|
137
|
+
```js
|
|
138
|
+
import { event, recorder } from 'codeceptjs';
|
|
139
|
+
import request from 'request';
|
|
140
|
+
|
|
141
|
+
export default function() {
|
|
142
|
+
|
|
143
|
+
event.dispatcher.on(event.test.before, function (test) {
|
|
144
|
+
|
|
145
|
+
recorder.add('create fixture data via API', function() {
|
|
146
|
+
return new Promise((doneFn, errFn) => {
|
|
147
|
+
request({
|
|
148
|
+
baseUrl: 'http://api.site.com/',
|
|
149
|
+
method: 'POST',
|
|
150
|
+
url: '/users',
|
|
151
|
+
json: { name: 'john', email: 'john@john.com' }
|
|
152
|
+
}), (err, httpResponse, body) => {
|
|
153
|
+
if (err) return errFn(err);
|
|
154
|
+
doneFn();
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Config
|
|
163
|
+
|
|
164
|
+
CodeceptJS config can be accessed from `import { config } from 'codeceptjs'` then `config.get()`:
|
|
165
|
+
|
|
166
|
+
```js
|
|
167
|
+
import { config } from 'codeceptjs';
|
|
168
|
+
|
|
169
|
+
// config object has access to all values of the current config file
|
|
170
|
+
|
|
171
|
+
if (config.get().myKey == 'value') {
|
|
172
|
+
// run something
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
### Output
|
|
178
|
+
|
|
179
|
+
Output module provides four verbosity levels. Depending on the mode you can have different information printed using corresponding functions.
|
|
180
|
+
|
|
181
|
+
* `default`: prints basic information using `output.print`
|
|
182
|
+
* `steps`: toggled by `--steps` option, prints step execution
|
|
183
|
+
* `debug`: toggled by `--debug` option, prints steps, and debug information with `output.debug`
|
|
184
|
+
* `verbose`: toggled by `--verbose` prints debug information and internal logs with `output.log`
|
|
185
|
+
|
|
186
|
+
It is recommended to avoid `console.log` and use output.* methods for printing.
|
|
187
|
+
|
|
188
|
+
```js
|
|
189
|
+
import { output } from 'codeceptjs';
|
|
190
|
+
|
|
191
|
+
output.print('This is basic information');
|
|
192
|
+
output.debug('This is debug information');
|
|
193
|
+
output.log('This is verbose logging information');
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
#### Test Object
|
|
197
|
+
|
|
198
|
+
The test events are providing a test object with following properties:
|
|
199
|
+
|
|
200
|
+
* `title` title of the test
|
|
201
|
+
* `body` test function as a string
|
|
202
|
+
* `opts` additional test options like retries, and others
|
|
203
|
+
* `pending` true if test is scheduled for execution and false if a test has finished
|
|
204
|
+
* `tags` array of tags for this test
|
|
205
|
+
* `artifacts` list of files attached to this test. Screenshots, videos and other files can be saved here and shared accross different reporters
|
|
206
|
+
* `file` path to a file with a test
|
|
207
|
+
* `steps` array of executed steps (available only in `test.passed`, `test.failed`, `test.finished` event)
|
|
208
|
+
* `skipInfo` additional test options when test skipped
|
|
209
|
+
* * `message` string with reason for skip
|
|
210
|
+
* * `description` string with test body
|
|
211
|
+
and others
|
|
212
|
+
|
|
213
|
+
#### Step Object
|
|
214
|
+
|
|
215
|
+
Step events provide step objects with following fields:
|
|
216
|
+
|
|
217
|
+
* `name` name of a step, like 'see', 'click', and others
|
|
218
|
+
* `actor` current actor, in most cases it is `I`
|
|
219
|
+
* `helper` current helper instance used to execute this step
|
|
220
|
+
* `helperMethod` corresponding helper method, in most cases is the same as `name`
|
|
221
|
+
* `status` status of a step (passed or failed)
|
|
222
|
+
* `prefix` if a step is executed inside `within` block contain within text, like: 'Within .js-signup-form'.
|
|
223
|
+
* `args` passed arguments
|
|
224
|
+
|
|
225
|
+
Whenever you execute tests with `--verbose` option you will see registered events and promises executed by a recorder.
|
|
226
|
+
|
|
227
|
+
## Custom Runner
|
|
228
|
+
|
|
229
|
+
You can run CodeceptJS tests from your script.
|
|
230
|
+
|
|
231
|
+
```js
|
|
232
|
+
import { codecept as Codecept } from 'codeceptjs';
|
|
233
|
+
|
|
234
|
+
// define main config
|
|
235
|
+
const config = {
|
|
236
|
+
helpers: {
|
|
237
|
+
WebDriver: {
|
|
238
|
+
browser: 'chrome',
|
|
239
|
+
url: 'http://localhost'
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
const opts = { steps: true };
|
|
245
|
+
|
|
246
|
+
// run CodeceptJS inside async function
|
|
247
|
+
(async () => {
|
|
248
|
+
const codecept = new Codecept(config, options);
|
|
249
|
+
codecept.init(__dirname);
|
|
250
|
+
|
|
251
|
+
try {
|
|
252
|
+
await codecept.bootstrap();
|
|
253
|
+
codecept.loadTests('**_test.js');
|
|
254
|
+
// run tests
|
|
255
|
+
await codecept.run(test);
|
|
256
|
+
} catch (err) {
|
|
257
|
+
printError(err);
|
|
258
|
+
process.exitCode = 1;
|
|
259
|
+
} finally {
|
|
260
|
+
await codecept.teardown();
|
|
261
|
+
}
|
|
262
|
+
})();
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
> Also, you can run tests inside workers in a custom scripts. Please refer to the [parallel execution](/parallel) guide for more details.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Internal API Test Server
|
|
2
|
+
|
|
3
|
+
This directory contains the internal API test server implementation that replaces the third-party `json-server` dependency.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
- `lib/test-server.js` - Main TestServer class implementation
|
|
8
|
+
- `bin/test-server.js` - CLI script to run the server standalone
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
### As npm script:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm run test-server
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Directly:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
node bin/test-server.js [options] [db-file]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Options:
|
|
25
|
+
|
|
26
|
+
- `-p, --port <port>` - Port to listen on (default: 8010)
|
|
27
|
+
- `--host <host>` - Host to bind to (default: 0.0.0.0)
|
|
28
|
+
- `db-file` - Path to JSON database file (default: test/data/rest/db.json)
|
|
29
|
+
|
|
30
|
+
## Features
|
|
31
|
+
|
|
32
|
+
- **Full REST API compatibility** with json-server
|
|
33
|
+
- **Automatic file watching** - Reloads data when db.json file changes
|
|
34
|
+
- **CORS support** - Allows cross-origin requests for testing
|
|
35
|
+
- **Custom headers support** - Handles special headers like X-Test
|
|
36
|
+
- **File upload endpoints** - Basic file upload simulation
|
|
37
|
+
- **Express.js based** - Uses familiar Express.js framework
|
|
38
|
+
|
|
39
|
+
## API Endpoints
|
|
40
|
+
|
|
41
|
+
The server provides the same API endpoints as json-server:
|
|
42
|
+
|
|
43
|
+
### Users
|
|
44
|
+
|
|
45
|
+
- `GET /user` - Get user data
|
|
46
|
+
- `POST /user` - Create/update user
|
|
47
|
+
- `PATCH /user` - Partially update user
|
|
48
|
+
- `PUT /user` - Replace user
|
|
49
|
+
|
|
50
|
+
### Posts
|
|
51
|
+
|
|
52
|
+
- `GET /posts` - Get all posts
|
|
53
|
+
- `GET /posts/:id` - Get specific post
|
|
54
|
+
- `POST /posts` - Create new post
|
|
55
|
+
- `PUT /posts/:id` - Replace specific post
|
|
56
|
+
- `PATCH /posts/:id` - Partially update specific post
|
|
57
|
+
- `DELETE /posts/:id` - Delete specific post
|
|
58
|
+
|
|
59
|
+
### Comments
|
|
60
|
+
|
|
61
|
+
- `GET /comments` - Get all comments
|
|
62
|
+
- `POST /comments` - Create new comment
|
|
63
|
+
- `DELETE /comments/:id` - Delete specific comment
|
|
64
|
+
|
|
65
|
+
### Utility
|
|
66
|
+
|
|
67
|
+
- `GET /headers` - Return request headers (for testing)
|
|
68
|
+
- `POST /headers` - Return request headers (for testing)
|
|
69
|
+
- `POST /upload` - File upload simulation
|
|
70
|
+
- `POST /_reload` - Manually reload database file
|
|
71
|
+
|
|
72
|
+
## Migration from json-server
|
|
73
|
+
|
|
74
|
+
This server is designed as a drop-in replacement for json-server. The key differences:
|
|
75
|
+
|
|
76
|
+
1. **No CLI options** - Configuration is done through constructor options or CLI args
|
|
77
|
+
2. **Automatic file watching** - No need for `--watch` flag
|
|
78
|
+
3. **Built-in middleware** - Headers and CORS are handled automatically
|
|
79
|
+
4. **Simpler file upload** - Basic implementation without full multipart support
|
|
80
|
+
|
|
81
|
+
## Testing
|
|
82
|
+
|
|
83
|
+
The server is used by the following test suites:
|
|
84
|
+
|
|
85
|
+
- `test/rest/REST_test.js` - REST helper tests
|
|
86
|
+
- `test/rest/ApiDataFactory_test.js` - API data factory tests
|
|
87
|
+
- `test/helper/JSONResponse_test.js` - JSON response helper tests
|
|
88
|
+
|
|
89
|
+
All tests pass with the internal server, proving full compatibility.
|