external@serenity-js/assertions
Serenity/JS is an innovative open-source framework designed to make acceptance and regression testing of complex software systems faster, more collaborative and easier to scale.
⭐️ Get started with Serenity/JS!
- Serenity/JS web testing tutorial
- Serenity/JS Handbook and Getting Started guides
- API documentation
- Serenity/JS Project Templates
👋 Join the Serenity/JS Community!
- Meet other Serenity/JS developers and maintainers on the Serenity/JS Community chat channel,
- Find answers to your Serenity/JS questions on the Serenity/JS Forum,
- Learn how to contribute to Serenity/JS,
- Support the project and gain access to Serenity/JS Playbooks by becoming a Serenity/JS GitHub Sponsor!
Serenity/JS Assertions
@serenity-js/assertions
is an assertions library implementing the Screenplay Pattern.
Installation
To install this module, run the following command in your computer terminal:
npm install --save-dev @serenity-js/core @serenity-js/assertions
To learn more about Serenity/JS and how to use it on your project, follow the Serenity/JS Getting Started guide.
Performing verifications using Ensure
import { Ensure, endsWith } from '@serenity-js/assertions'
import { actorCalled } from '@serenity-js/core'
import { Navigate, Page } from '@serenity-js/web'
await actorCalled('Erica').attemptsTo(
Navigate.to('https://serenity-js.org'),
Ensure.that(
Page.current().title(),
endsWith('Serenity/JS')
),
)
Controlling execution flow using Check
import { actorCalled } from '@serenity-js/core'
import { Check } from '@serenity-js/assertions'
import { Click, isVisible } from '@serenity-js/protractor'
await actorCalled('Erica').attemptsTo(
Check.whether(NewsletterModal, isVisible())
.andIfSo(Click.on(CloseModalButton)),
)
Synchronising the test with the System Under Test using Wait
import { actorCalled } from '@serenity-js/core'
import { Click, isVisible, Wait } from '@serenity-js/protractor'
await actorCalled('Erica').attemptsTo(
Wait.until(CloseModalButton, isVisible()),
Click.on(CloseModalButton)
)
Defining custom expectations using Expectation.thatActualShould
import { actorCalled } from '@serenity-js/core'
import { Expectation, Ensure } from '@serenity-js/assertions'
function isDivisibleBy(expected: Answerable<number>): Expectation<number> {
return Expectation.thatActualShould<number, number>('have value divisible by', expected)
.soThat((actualValue, expectedValue) => actualValue % expectedValue === 0)
}
await actorCalled('Erica').attemptsTo(
Ensure.that(4, isDivisibleBy(2)),
)
Composing expectations using Expectation.to
import { actorCalled } from '@serenity-js/core'
import { Expectation, Ensure, and, or, isGreaterThan, isLessThan, equals } from '@serenity-js/assertions'
function isWithin(lowerBound: number, upperBound: number) {
return Expectation
.to(`have value within ${ lowerBound } and ${ upperBound }`)
.soThatActual(and(
or(isGreaterThan(lowerBound), equals(lowerBound)),
or(isLessThan(upperBound), equals(upperBound)),
))
}
await actorCalled('Erica').attemptsTo(
Ensure.that(5, isWithin(3, 6)),
)
📣 Stay up to date
New features, tutorials, and demos are coming soon! Follow Serenity/JS on LinkedIn, subscribe to Serenity/JS channel on YouTube and join the Serenity/JS Community Chat to stay up to date! Please also make sure to star ⭐️ Serenity/JS on GitHub to help others discover the framework!
💛 Support Serenity/JS
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!