A simple mock npm registry.
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.
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.
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
$ npm i -g registry-mock
$ npm-registry-echo
npm-registry-echo listening on 3676
//localhost:3676/:_password=garbage!!password
//localhost:3676/:username=garbage!!user
//localhost:3676/:[email protected]
//localhost:3676/:always-auth=false
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]
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}}}