external@serenity-js/local-server
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
- 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 Local Server
@serenity-js/local-server enables Serenity/JS Actors to manage local HTTP or HTTPS test servers powered by Express,
Hapi,
Koa,
Restify,
or raw Node.js.
Installation
To install this module, run the following command in your computer terminal:
npm install --save-dev @serenity-js/core @serenity-js/local-server
Example test
import { actorCalled } from '@serenity-js/core'
import {
ManageALocalServer, StartLocalServer, StopLocalServer
} from '@serenity-js/local-server'
import { CallAnApi, GetRequest, Send } from '@serenity-js/rest'
import { Ensure, equals } from '@serenity-js/assertions'
import axios from 'axios'
import { requestListener } from './listener' // (1)
const actor = actorCalled('Apisit').whoCan(
ManageALocalServer.runningAHttpListener(requestListener), // (2)
CallAnApi.using(axios.create()),
)
await actor.attemptsTo(
StartLocalServer.onRandomPort(), // (3)
Send.a(GetRequest.to(LocalServer.url())), // (4)
Ensure.that(LastResponse.status(), equals(200)),
Ensure.that(LastResponse.body(), equals('Hello!')),
StopLocalServer.ifRunning(), // (5)
)
In the above example:
- Import a
requestListeneryou want to use in your test. - Give the actor an ability
to
ManageALocalServer. This enables the interactions toStartLocalServerandStopLocalServer, as well as theLocalServerquestion. - Start the local server on a random port, specific port, or a random port within your preferred port range.
- Use the
LocalServer.url()question to retrieve the url of the local server and interact with its HTTP API. - Stop the local server is when the test is complete.
Please note that you probably want to
StopLocalServerin anafterEachblock of your test (or something equivalent) to make sure that the server is correctly shut down even when the test fails.
Creating a server
Any requestListener accepted by Node's
http.createServer
or https.createServer
can be used with ManageALocalServer.
Below are example implementations of a simple HTTP server that would satisfy the above test.
Raw Node.js
// listener.js
module.exports.requestListener = (request, response) => {
response.setHeader('Connection', 'close')
response.end('Hello World!')
}
Express
// listener.js
const express = require('express')
module.exports.requestListener = express().
get('/', (req: express.Request, res: express.Response) => {
res.status(200).send('Hello World!')
})
HAPI
// listener.js
const hapi = require('@hapi/hapi')
const server = new hapi.Server()
server.route({ method: 'GET', path: '/', handler: (req, h) => 'Hello World!' })
module.exports.requestListener = server.listener
Koa
// listener.js
const Koa = require('koa')
module.exports.requestListener = new Koa()
.use(ctx => Promise.resolve(ctx.body = 'Hello World!'))
.callback()
Restify
// listener.js
const restify = require('restify')
const server = restify.createServer(options)
server.get('/', (req, res, next) => {
res.send('Hello World!')
})
module.exports.requestListener = server
📣 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!
Index
Abilities
Activities
Models
Questions
Type Aliases
Type Aliases
externalRequestListener
Type declaration
Parameters
externalrequest: http.IncomingMessage
externalresponse: http.ServerResponse
Returns void
externalServerWithShutdown
A net.Server with
an additional shutdown method.
A
requestListenerfunction accepted by Node'shttp.createServerorhttps.createServer.