@serenity-js/assertions 3.36.1 → 3.37.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.37.0](https://github.com/serenity-js/serenity-js/compare/v3.36.2...v3.37.0) (2025-12-02)
7
+
8
+ **Note:** Version bump only for package @serenity-js/assertions
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.36.2](https://github.com/serenity-js/serenity-js/compare/v3.36.1...v3.36.2) (2025-11-26)
15
+
16
+ **Note:** Version bump only for package @serenity-js/assertions
17
+
18
+
19
+
20
+
21
+
6
22
  ## [3.36.1](https://github.com/serenity-js/serenity-js/compare/v3.36.0...v3.36.1) (2025-11-16)
7
23
 
8
24
 
package/README.md CHANGED
@@ -1,39 +1,57 @@
1
- # Serenity/JS
1
+ # Serenity/JS Assertions
2
+
3
+ [![NPM Version](https://badge.fury.io/js/%40serenity-js%2Fassertions.svg)](https://badge.fury.io/js/%40serenity-js%2Fassertions)
4
+ [![Build Status](https://github.com/serenity-js/serenity-js/actions/workflows/main.yaml/badge.svg?branch=main)](https://github.com/serenity-js/serenity-js/actions)
5
+ [![Maintainability](https://qlty.sh/gh/serenity-js/projects/serenity-js/maintainability.svg)](https://qlty.sh/gh/serenity-js/projects/serenity-js)
6
+ [![Code Coverage](https://qlty.sh/gh/serenity-js/projects/serenity-js/coverage.svg)](https://qlty.sh/gh/serenity-js/projects/serenity-js)
7
+ [![Contributors](https://img.shields.io/github/contributors/serenity-js/serenity-js.svg)](https://github.com/serenity-js/serenity-js/graphs/contributors)
8
+ [![Known Vulnerabilities](https://snyk.io/test/npm/@serenity-js/assertions/badge.svg)](https://snyk.io/test/npm/@serenity-js/assertions)
9
+ [![GitHub stars](https://img.shields.io/github/stars/serenity-js/serenity-js?style=flat)](https://github.com/serenity-js/serenity-js)
2
10
 
3
11
  [![Follow Serenity/JS on LinkedIn](https://img.shields.io/badge/Follow-Serenity%2FJS%20-0077B5?logo=linkedin)](https://www.linkedin.com/company/serenity-js)
4
12
  [![Watch Serenity/JS on YouTube](https://img.shields.io/badge/Watch-@serenity--js-E62117?logo=youtube)](https://www.youtube.com/@serenity-js)
5
13
  [![Join Serenity/JS Community Chat](https://img.shields.io/badge/Chat-Serenity%2FJS%20Community-FBD30B?logo=matrix)](https://matrix.to/#/#serenity-js:gitter.im)
6
14
  [![Support Serenity/JS on GitHub](https://img.shields.io/badge/Support-@serenity--js-703EC8?logo=github)](https://github.com/sponsors/serenity-js)
7
15
 
8
- [Serenity/JS](https://serenity-js.org) is an innovative open-source framework designed to make acceptance and regression testing
9
- of complex software systems faster, more collaborative and easier to scale.
16
+ [`@serenity-js/assertions`](https://serenity-js.org/api/assertions/)
17
+ provides a rich set of [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern/)-compatible assertions and expectations for verifying the system under test and synchronising the test flow.
10
18
 
11
- ⭐️ Get started with Serenity/JS!
12
- - [Serenity/JS web testing tutorial](https://serenity-js.org/handbook/web-testing/your-first-web-scenario)
13
- - [Serenity/JS Handbook](https://serenity-js.org/handbook)
14
- - [API documentation](https://serenity-js.org/api/)
15
- - [Serenity/JS Project Templates](https://serenity-js.org/handbook/project-templates/)
19
+ ## Features
16
20
 
17
- 👋 Join the Serenity/JS Community!
18
- - Meet other Serenity/JS developers and maintainers on the [Serenity/JS Community chat channel](https://matrix.to/#/#serenity-js:gitter.im),
19
- - Find answers to your Serenity/JS questions on the [Serenity/JS Forum](https://github.com/orgs/serenity-js/discussions/categories/how-do-i),
20
- - Learn how to [contribute to Serenity/JS](https://serenity-js.org/community/contributing/),
21
- - Support the project and gain access to [Serenity/JS Playbooks](https://github.com/serenity-js/playbooks) by becoming a [Serenity/JS GitHub Sponsor](https://github.com/sponsors/serenity-js)!
21
+ - **Fluent, expressive assertions** following the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern/) for readable and maintainable tests.
22
+ - **Seamless integration** with all [supported test runners](https://serenity-js.org/handbook/test-runners/).
23
+ - **Rich set of built-in matchers** for common scenarios, with easy support for custom matchers.
24
+ - **TypeScript-first design** with strong typing for safer, more predictable test code.
22
25
 
23
- ## Serenity/JS Assertions
26
+ ## Installation
24
27
 
25
- [`@serenity-js/assertions`](https://serenity-js.org/api/rest/) is an assertions library implementing the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern/).
28
+ ```sh
29
+ npm install --save-dev @serenity-js/core @serenity-js/assertions
30
+ ```
26
31
 
27
- ### Installation
32
+ See the [Serenity/JS Installation Guide](https://serenity-js.org/handbook/installation/).
28
33
 
29
- To install this module, run the following command in your computer terminal:
30
34
 
31
- ```sh
32
- npm install --save-dev @serenity-js/core @serenity-js/assertions
35
+ ## Quick Start
36
+
37
+ ```typescript
38
+ import { actorCalled } from '@serenity-js/core';
39
+ import { Ensure, equals } from '@serenity-js/assertions';
40
+
41
+ await actorCalled('Alice').attemptsTo(
42
+ Ensure.that(2 + 2, equals(4))
43
+ )
33
44
  ```
34
45
 
46
+ Explore practical examples and in-depth explanations in the [Serenity/JS Handbook](https://serenity-js.org/handbook/).
35
47
 
36
- ### Performing verifications using `Ensure`
48
+ ## Usage Examples
49
+
50
+ ### Performing assertion
51
+
52
+ To perform an assertion, use the [`Ensure.that`](https://serenity-js.org/api/assertions/class/Ensure/)
53
+ or [`Ensure.eventually`](https://serenity-js.org/api/assertions/class/Ensure/#eventually) tasks,
54
+ along with an appropriate [expectation](https://serenity-js.org/api/assertions/):
37
55
 
38
56
  ```typescript
39
57
  import { Ensure, endsWith } from '@serenity-js/assertions'
@@ -49,12 +67,14 @@ await actorCalled('Erica').attemptsTo(
49
67
  )
50
68
  ```
51
69
 
52
- ### Controlling execution flow using `Check`
70
+ ### Controlling execution flow
71
+
72
+ To control the execution flow based on certain conditions, use the [`Check.whether`](https://serenity-js.org/api/core/class/Check/) task:
53
73
 
54
74
  ```typescript
55
75
  import { actorCalled } from '@serenity-js/core'
56
76
  import { Check } from '@serenity-js/assertions'
57
- import { Click, isVisible } from '@serenity-js/protractor'
77
+ import { Click, isVisible } from '@serenity-js/web'
58
78
 
59
79
  await actorCalled('Erica').attemptsTo(
60
80
  Check.whether(NewsletterModal, isVisible())
@@ -62,11 +82,14 @@ await actorCalled('Erica').attemptsTo(
62
82
  )
63
83
  ```
64
84
 
65
- ### Synchronising the test with the System Under Test using `Wait`
85
+ ### Synchronising execution with the System Under Test
86
+
87
+ To synchronise the test flow with the state of the System Under Test,
88
+ use the [`Wait.until`](https://serenity-js.org/api/core/class/Wait/) task:
66
89
 
67
90
  ```typescript
68
91
  import { actorCalled } from '@serenity-js/core'
69
- import { Click, isVisible, Wait } from '@serenity-js/protractor'
92
+ import { Click, isVisible, Wait } from '@serenity-js/web'
70
93
 
71
94
  await actorCalled('Erica').attemptsTo(
72
95
  Wait.until(CloseModalButton, isVisible()),
@@ -74,7 +97,10 @@ await actorCalled('Erica').attemptsTo(
74
97
  )
75
98
  ```
76
99
 
77
- ### Defining custom expectations using `Expectation.thatActualShould`
100
+ ### Defining custom expectations
101
+
102
+ To define a custom expectation,
103
+ use the [`Expectation.thatActualShould`](https://serenity-js.org/api/assertions/#defining-custom-expectations-using-expectationthatactualshould) method:
78
104
 
79
105
  ```typescript
80
106
  import { actorCalled } from '@serenity-js/core'
@@ -90,7 +116,9 @@ await actorCalled('Erica').attemptsTo(
90
116
  )
91
117
  ```
92
118
 
93
- ### Composing expectations using `Expectation.to`
119
+ ### Composing expectations
120
+
121
+ To compose complex expectations, use the [`Expectation.to`](https://serenity-js.org/api/assertions/#composing-expectations-using-expectationto) method:
94
122
 
95
123
  ```typescript
96
124
  import { actorCalled } from '@serenity-js/core'
@@ -110,21 +138,38 @@ await actorCalled('Erica').attemptsTo(
110
138
  )
111
139
  ```
112
140
 
113
- ## 📣 Stay up to date
141
+ ## Documentation
114
142
 
115
- New features, tutorials, and demos are coming soon!
116
- Follow [Serenity/JS on LinkedIn](https://www.linkedin.com/company/serenity-js),
117
- subscribe to [Serenity/JS channel on YouTube](https://www.youtube.com/@serenity-js) and join the [Serenity/JS Community Chat](https://matrix.to/#/#serenity-js:gitter.im) to stay up to date!
118
- Please also make sure to star ⭐️ [Serenity/JS on GitHub](https://github.com/serenity-js/serenity-js) to help others discover the framework!
143
+ - [API Reference](https://serenity-js.org/api/)
144
+ - [Screenplay Pattern Guide](https://serenity-js.org/handbook/design/screenplay-pattern/)
145
+ - [Serenity/JS Project Templates](https://serenity-js.org/handbook/project-templates/)
146
+ - [Tutorial: First Web Scenario](https://serenity-js.org/handbook/tutorials/your-first-web-scenario/)
147
+ - [Tutorial: First API Scenario](https://serenity-js.org/handbook/tutorials/your-first-api-scenario/)
119
148
 
120
- [![Follow Serenity/JS on LinkedIn](https://img.shields.io/badge/Follow-Serenity%2FJS%20-0077B5?logo=linkedin)](https://www.linkedin.com/company/serenity-js)
121
- [![Watch Serenity/JS on YouTube](https://img.shields.io/badge/Watch-@serenity--js-E62117?logo=youtube)](https://www.youtube.com/@serenity-js)
122
- [![Join Serenity/JS Community Chat](https://img.shields.io/badge/Chat-Serenity%2FJS%20Community-FBD30B?logo=matrix)](https://matrix.to/#/#serenity-js:gitter.im)
123
- [![GitHub stars](https://img.shields.io/github/stars/serenity-js/serenity-js?label=Serenity%2FJS&logo=github&style=badge)](https://github.com/serenity-js/serenity-js)
149
+ ## Contributing
150
+
151
+ Contributions of all kinds are welcome! Get started with the [Contributing Guide](https://serenity-js.org/community/contributing/).
152
+
153
+ ## Community
154
+
155
+ - [Community Chat](https://matrix.to/#/#serenity-js:gitter.im)
156
+ - [Discussions Forum](https://github.com/orgs/serenity-js/discussions)
157
+ - Visit the [💡How to... ?](https://github.com/orgs/serenity-js/discussions/categories/how-to) section for answers to common questions
158
+
159
+ If you enjoy using Serenity/JS, make sure to star ⭐️ [Serenity/JS on GitHub](https://github.com/serenity-js/serenity-js) to help others discover the framework!
160
+
161
+ ## License
162
+
163
+ The Serenity/JS code base is licensed under the [Apache-2.0](https://opensource.org/license/apache-2-0) license,
164
+ while its documentation and the [Serenity/JS Handbook](https://serenity-js.org/handbook/) are licensed under the [Creative Commons BY-NC-SA 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/).
165
+
166
+ See the [Serenity/JS License](https://serenity-js.org/legal/license/).
124
167
 
125
- ## 💛 Support Serenity/JS
168
+ ## Support
126
169
 
127
- If you appreciate all the effort that goes into making sophisticated tools easy to work with, please support our work and become a Serenity/JS GitHub Sponsor today!
170
+ Support ongoing development through [GitHub Sponsors](https://github.com/sponsors/serenity-js). Sponsors gain access to [Serenity/JS Playbooks](https://github.com/serenity-js/playbooks)
171
+ and priority help in the [Discussions Forum](https://github.com/orgs/serenity-js/discussions).
128
172
 
129
- [![GitHub Sponsors](https://img.shields.io/badge/Support%20@serenity%2FJS-703EC8?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/serenity-js)
173
+ For corporate sponsorship or commercial support, please contact [Jan Molak](https://www.linkedin.com/in/janmolak/).
130
174
 
175
+ [![GitHub Sponsors](https://img.shields.io/badge/Support%20@serenity%2FJS-703EC8?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/serenity-js).
package/lib/Ensure.d.ts CHANGED
@@ -71,6 +71,9 @@ export declare class Ensure<Actual> extends Interaction {
71
71
  * which verifies if the resolved value of the provided [`Answerable`](https://serenity-js.org/api/core/#Answerable)
72
72
  * meets the specified [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) within the expected timeframe.
73
73
  *
74
+ * After the first try, it waits longer and longer between checks, following a simple exponential backoff pattern (2^try * 100). So 0ms the first
75
+ * time, then 200ms, 400ms, 800ms, 1600ms, 3200ms and so on.
76
+ *
74
77
  * If the expectation is not met by the time the timeout expires, the interaction throws an [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/).
75
78
  *
76
79
  * @param {Answerable<Actual_Type>} actual
@@ -1 +1 @@
1
- {"version":3,"file":"Ensure.d.ts","sourceRoot":"","sources":["../src/Ensure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAMH,WAAW,EAKd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,MAAM,CAAC,MAAM,CAAE,SAAQ,WAAW;IA6CvC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;IA5CvD;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IAIrH;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAC;IAIrI;;;;OAIG;IACH,OAAO;IAQP;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3F;;;;;;;;;OASG;IACH,iBAAiB,CAAC,kBAAkB,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW;CAgB7H"}
1
+ {"version":3,"file":"Ensure.d.ts","sourceRoot":"","sources":["../src/Ensure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAMH,WAAW,EAKd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,MAAM,CAAC,MAAM,CAAE,SAAQ,WAAW;IAgDvC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;IA/CvD;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IAIrH;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAC;IAIrI;;;;OAIG;IACH,OAAO;IAQP;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3F;;;;;;;;;OASG;IACH,iBAAiB,CAAC,kBAAkB,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW;CAgB7H"}
package/lib/Ensure.js CHANGED
@@ -75,6 +75,9 @@ class Ensure extends core_1.Interaction {
75
75
  * which verifies if the resolved value of the provided [`Answerable`](https://serenity-js.org/api/core/#Answerable)
76
76
  * meets the specified [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) within the expected timeframe.
77
77
  *
78
+ * After the first try, it waits longer and longer between checks, following a simple exponential backoff pattern (2^try * 100). So 0ms the first
79
+ * time, then 200ms, 400ms, 800ms, 1600ms, 3200ms and so on.
80
+ *
78
81
  * If the expectation is not met by the time the timeout expires, the interaction throws an [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/).
79
82
  *
80
83
  * @param {Answerable<Actual_Type>} actual
package/lib/Ensure.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Ensure.js","sourceRoot":"","sources":["../src/Ensure.ts"],"names":[],"mappings":";;;AAQA,4CAW2B;AAG3B,yDAAsD;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAa,MAAe,SAAQ,kBAAW;IA6CpB;IACA;IA5CvB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,IAAI,CAAc,MAA+B,EAAE,WAAqC;QAC3F,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,eAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,UAAU,CAAc,MAA+B,EAAE,WAAqC;QACjG,OAAO,IAAI,mCAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,eAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACH,YACuB,MAA0B,EAC1B,WAAgC,EACnD,QAA4B;QAE5B,KAAK,CAAC,IAAA,UAAG,EAAA,uBAAwB,MAAO,SAAU,WAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;QAJzD,WAAM,GAAN,MAAM,CAAoB;QAC1B,gBAAW,GAAX,WAAW,CAAqB;IAIvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,KAA2D;QACvE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3E,IAAI,OAAO,YAAY,wBAAiB,EAAE,CAAC;YACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS;gBAC/C,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,eAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG,YAAa,iBAAkB,OAAQ,OAAO,CAAC,OAAQ,EAAE,CAAC;YAE1E,MAAM,kBAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,qBAAc,EAAE;gBAC/C,OAAO;gBACP,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;gBAC5D,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE;aACzC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAE,CAAC,OAAO,YAAY,qBAAc,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,iBAAU,CAAC,IAAA,QAAC,EAAA,wFAAyF,OAAQ,EAAE,CAAC,CAAC;QAC/H,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,kBAAwE,EAAE,OAAgB;QACxG,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE9C,OAAO,kBAAW,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YACpD,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACX,MAAM,kBAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE;oBACnD,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;oBACjC,QAAQ;oBACR,KAAK,EAAE,KAAK;iBACf,CAAC,CAAC;YACP,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAxGD,wBAwGC"}
1
+ {"version":3,"file":"Ensure.js","sourceRoot":"","sources":["../src/Ensure.ts"],"names":[],"mappings":";;;AAQA,4CAW2B;AAG3B,yDAAsD;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAa,MAAe,SAAQ,kBAAW;IAgDpB;IACA;IA/CvB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,IAAI,CAAc,MAA+B,EAAE,WAAqC;QAC3F,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,eAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,UAAU,CAAc,MAA+B,EAAE,WAAqC;QACjG,OAAO,IAAI,mCAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,eAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACH,YACuB,MAA0B,EAC1B,WAAgC,EACnD,QAA4B;QAE5B,KAAK,CAAC,IAAA,UAAG,EAAA,uBAAwB,MAAO,SAAU,WAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;QAJzD,WAAM,GAAN,MAAM,CAAoB;QAC1B,gBAAW,GAAX,WAAW,CAAqB;IAIvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,KAA2D;QACvE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3E,IAAI,OAAO,YAAY,wBAAiB,EAAE,CAAC;YACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS;gBAC/C,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,eAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG,YAAa,iBAAkB,OAAQ,OAAO,CAAC,OAAQ,EAAE,CAAC;YAE1E,MAAM,kBAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,qBAAc,EAAE;gBAC/C,OAAO;gBACP,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;gBAC5D,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE;aACzC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAE,CAAC,OAAO,YAAY,qBAAc,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,iBAAU,CAAC,IAAA,QAAC,EAAA,wFAAyF,OAAQ,EAAE,CAAC,CAAC;QAC/H,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,kBAAwE,EAAE,OAAgB;QACxG,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE9C,OAAO,kBAAW,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YACpD,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACX,MAAM,kBAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE;oBACnD,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;oBACjC,QAAQ;oBACR,KAAK,EAAE,KAAK;iBACf,CAAC,CAAC;YACP,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA3GD,wBA2GC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/assertions",
3
- "version": "3.36.1",
3
+ "version": "3.37.0",
4
4
  "description": "Serenity/JS universal assertion library supporting all types of functional tests, including both web and REST API scenarios",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -48,7 +48,7 @@
48
48
  "node": "^20 || ^22 || ^24"
49
49
  },
50
50
  "dependencies": {
51
- "@serenity-js/core": "3.36.1",
51
+ "@serenity-js/core": "3.37.0",
52
52
  "tiny-types": "1.24.3"
53
53
  },
54
54
  "devDependencies": {
@@ -61,5 +61,5 @@
61
61
  "ts-node": "10.9.2",
62
62
  "typescript": "5.9.3"
63
63
  },
64
- "gitHead": "d13abbfcd6255c6f9466394d4efa1e808907a71f"
64
+ "gitHead": "dae146cd99a04f09b5926fb9d3205af562fa2927"
65
65
  }
package/src/Ensure.ts CHANGED
@@ -94,6 +94,9 @@ export class Ensure<Actual> extends Interaction {
94
94
  * which verifies if the resolved value of the provided [`Answerable`](https://serenity-js.org/api/core/#Answerable)
95
95
  * meets the specified [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) within the expected timeframe.
96
96
  *
97
+ * After the first try, it waits longer and longer between checks, following a simple exponential backoff pattern (2^try * 100). So 0ms the first
98
+ * time, then 200ms, 400ms, 800ms, 1600ms, 3200ms and so on.
99
+ *
97
100
  * If the expectation is not met by the time the timeout expires, the interaction throws an [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/).
98
101
  *
99
102
  * @param {Answerable<Actual_Type>} actual