Security News
tea.xyz Spam Plagues npm and RubyGems Package Registries
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
mock-http-server
Advanced tools
Changelog
1.4.5 (2021-11-17)
multipart/form-data
double body parse error.Readme
Mockable HTTP Server your functional tests.
npm install mock-http-server
var ServerMock = require("mock-http-server");
describe('Test', function() {
// Run an HTTP server on localhost:9000
var server = new ServerMock({ host: "localhost", port: 9000 });
beforeEach(function(done) {
server.start(done);
});
afterEach(function(done) {
server.stop(done);
});
it('should do something', function(done) {
server.on({
method: 'GET',
path: '/resource',
reply: {
status: 200,
headers: { "content-type": "application/json" },
body: JSON.stringify({ hello: "world" })
}
});
// Now the server mock will handle a GET http://localhost:9000/resource
// and will reply with 200 `{"hello": "world"}`
done();
});
});
new ServerMock(httpConfig, httpsConfig)
instance a new mockable HTTP/HTTPS Server. If httpConfig
is defined, creates an HTTP server, while if httpsConfig
is defined, creates an HTTPS server. They can be both defined.
Example:
var server = new ServerMock({
host: "localhost",
port: 80
}, {
host: "localhost",
port: 443,
key: fs.readFileSync("private-key.pem"),
cert: fs.readFileSync("certificate.pem")
});
start(callback)
Starts the server and invokes the callback once ready to accept connections.
Example:
beforeEach(function(done) {
server.start(done);
});
stop(callback)
Stops the server and invokes the callback all resources have been released.
Example:
afterEach(function(done) {
server.stop(done);
});
on(options)
Defines a request handler. Multiple calls to on()
can be chained together.
Option | Default | Description |
---|---|---|
method | GET | HTTP method to match. Can be * to match any method. |
path | HTTP request path to match. Can be * to match any path (to be used in conjunction with filter to allow custom matching) | |
filter | The value is a filter function fn(request) : if it returns true the handler gets executed. | |
reply.status | 200 | HTTP response status code. Can be a number or a synchronous function fn(request) that returns the response status code. |
reply.headers | { "content-type": "application/json" } | HTTP response headers. content-length is managed by the server implementation. |
reply.headersOverrides | { "content-length": 1000 } | HTTP response headers to override to default headers (ie. content-length ). If a value is set to undefined , the header gets removed from the response. |
reply.body | empty string | HTTP response body. Can be a string , a synchronous function fn(request) that returns the body, or an asynchronous function fn(request, reply) that send the response body invoking reply(body) . |
reply.end | true | End the response once the body has been sent (default behaviour). If false , it will keep the response connection open indefinitely (useful to test special cases on the client side - ie. read timeout after partial body response sent). |
delay | 0 | Delays the response by X milliseconds. |
Example:
server.on({
method: 'GET',
path: '/resource',
reply: {
status: 200,
headers: { "content-type": "application/json" },
body: JSON.stringify({ hello: "world" })
}
});
or:
server.on({
method: '*',
path: '/resource',
reply: {
status: 200,
headers: { "content-type": "application/json" },
body: function(req) {
return req.method === "GET" ? JSON.stringify({ action: "read" }) : JSON.stringify({ action: "edit" });
}
}
});
or:
server.on({
method: '*',
path: '/resource',
reply: {
status: 200,
headers: { "content-type": "application/json" },
body: function(req, reply) {
setTimeout(function() {
reply(req.method === "GET" ? JSON.stringify({ action: "read" }) : JSON.stringify({ action: "edit" }));
}, 100);
}
}
});
or (JSON is parsed when the Content-Type is 'application/json'):
server.on({
method: 'POST',
path: '/resources',
filter: function (req) {
return _.isEqual(req.body, {
name: 'someName',
someOtherValue: 1234
})
},
reply: {
status: 201,
headers: { "content-type": "application/json" },
body: {
id: 987654321,
name: 'someName',
someOtherValue: 1234
}
}
});
requests(filter)
Returns an array containing all requests received. If filter
is defined, it allows to filter requests by method
, path
, or both.
Filter | Description |
---|---|
method | Filter requests by method. |
path | Filter requests by path. |
Example:
// Returns all requests
server.requests();
// Returns all GET requests
server.requests({ method: "GET" });
// Returns all GET requests to /resource
server.requests({ method: "GET", path: "/resource" });
connections()
Returns an array containing all active connections.
getHttpPort()
Returns the port at which the HTTP server is listening to or null
otherwise. This may be useful if you configure the HTTP server port to 0
which means the operating system will assign an arbitrary unused port.
getHttpsPort()
Returns the port at which the HTTPS server is listening to or null
otherwise. This may be useful if you configure the HTTPS server port to 0
which means the operating system will assign an arbitrary unused port.
reset()
Clears request handlers and requests received by the HTTP server.
resetHandlers()
Clears all request handlers that were previously set using on()
method.
resetRequests()
Clears all requests received by the HTTP server.
Release npm package:
package.json
and package-lock.json
CHANGES.md
npm publish
MIT
FAQs
Controllable HTTP Server Mock for your functional tests
The npm package mock-http-server receives a total of 11,905 weekly downloads. As such, mock-http-server popularity was classified as popular.
We found that mock-http-server demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 7 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
Security News
As cyber threats become more autonomous, AI-powered defenses are crucial for businesses to stay ahead of attackers who can exploit software vulnerabilities at scale.
Security News
UnitedHealth Group disclosed that the ransomware attack on Change Healthcare compromised protected health information for millions in the U.S., with estimated costs to the company expected to reach $1 billion.