registry-mock
v2.0.0
Published
mock registry for publishing
Readme
registry-mock
A simple mock npm registry.
Usage
var registryMock = require('registry-mock');
registryMock({ http: 8080 }, (err, registry) => {
if (err) { /* handle me */ }
console.log('Mock npm registry listening on 8080');
});registry-mock is designed to be a generic caching HTTP server for asserting that proxied
npm registry HTTP calls send the correct payloads and/or headers to the target registry.
In order to test some npm-specific routes (such as publish) it is necessary to cache tarballs
and later serve them.
HTTP & cache conventions
The response to incoming requests can be summarized based on a few simple rules:
- All requests to
/.*tgzor those with theX-FETCH-CACHEheader respond with the last request body received for that route.
If there is no cache for that route a
404is served.If
X-CLEAR-CACHEis provided to a cache hit request, then the cache is cleared for that route.All other requests are cached for future assertion and the response is given from the JSON parsed
X-SEND-RESPONSEheader:
{
"body": { an: 'unstringified JSON object' },
"status": 200
}- npm publish
PUT /:pkgsplits out the tarball and makes the cache for/:pkg/-/:pkg-:version.tgzavailable for download.
Using npm-registry-echo
This package also ships a binary named npm-registry-echo this program runs a simple
registry-mock server and then fetches the cache immediately after all requests. This
allows for simple introspection of the payloads that are sent from the npm CLI.
e.g. Viewing npm publish payloads
1. Running npm-registry-echo
$ npm i -g registry-mock
$ npm-registry-echo
npm-registry-echo listening on 36762. Add garbage nerf darts to your ~/.npmrc
//localhost:3676/:_password=garbage!!password
//localhost:3676/:username=garbage!!user
//localhost:3676/:[email protected]
//localhost:3676/:always-auth=false3. Run npm publish against your echo
npm publish --reg=http://localhost:3676 --loglevel=http
npm http request PUT http://localhost:3676/test-publish03
npm http 201 http://localhost:3676/test-publish03
+ [email protected]4. See the output
PUT /test-publish03 {"_id":"test-publish03","name":"test-publish03","description":"Just a
test","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"test-publish03","version":
"1.0.0","description":"Just a test","main":"index.js","scripts":{"test":"echo \"Error: no test
specified\" && exit 1"},"author":"","license":"ISC","readme":"ERROR: No README data found!",
"_id":"[email protected]","_shasum":"6e78734fff0347a9596abb5d3b0360fda6f1a899","_from":".",
"_npmVersion":"3.7.1","_nodeVersion":"4.2.2","_npmUser":{"name":"garbage!!user","email":
"[email protected]"},"maintainers":[{"name":"garbage!!user","email":"[email protected]"}],
"dist":{"shasum":"6e78734fff0347a9596abb5d3b0360fda6f1a899","tarball":
"http://localhost:3676/test-publish03/-/test-publish03-1.0.0.tgz"}}},"readme":"ERROR:
No README data found!","maintainers":[{"name":"garbage!!user","email":"[email protected]"}],
"_attachments":{"test-publish03-1.0.0.tgz":{"content_type":"application/octet-stream",
"data":"{{BIG-BASE64-TARBALL}}","length":568}}}