Socket
Socket
Sign inDemoInstall

nock

Package Overview
Dependencies
Maintainers
1
Versions
430
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nock - npm Package Compare versions

Comparing version 0.1.7 to 0.2.0

86

lib/intercept.js

@@ -26,6 +26,10 @@ var path = require('path')

var req = new EventEmitter()
, requestBodyBuffers = [];
, response = new EventEmitter()
, requestBodyBuffers = []
, aborted
, end
, ended;
req.write = function(buffer, encoding) {
if (buffer) {
if (buffer && !aborted) {
if (! Buffer.isBuffer(buffer)) {

@@ -39,12 +43,27 @@ buffer = new Buffer(buffer, encoding);

req.end = function(buffer, encoding) {
req.write(buffer, encoding);
req.emit('end');
if (!aborted && !ended) {
req.write(buffer, encoding);
end();
req.emit('end');
}
};
req.on('end', function() {
var response = new EventEmitter()
, encoding
req.abort = function() {
aborted = true;
if (!ended) {
end();
}
var err = new Error();
err.code = 'aborted'
response.emit('close', err);
};
end = function() {
ended = true;
var encoding
, requestBody
, responseBody
, interceptor;
, interceptor
, paused
, next = [];

@@ -62,3 +81,3 @@ requestBody = requestBodyBuffers.map(function(buffer) {

interceptor = interceptors.splice(0, 1)[0];
response.statusCode = interceptor.statusCode || 200;

@@ -74,16 +93,41 @@ response.headers = interceptor.headers || {};

interceptor.discard();
if (aborted) { return; }
response.pause = function() {
paused = true;
};
response.resume = function() {
paused = false;
callnext();
};
next.push(function() {
if (encoding) {
responseBody = responseBody.toString(encoding);
}
response.emit('data', responseBody);
});
next.push(function() {
response.emit('end');
});
callnext = function() {
if (paused || next.length === 0 || aborted) { return; }
process.nextTick(function() {
next.shift()();
callnext();
});
};
process.nextTick(function() {
callback(response);
process.nextTick(function() {
if (encoding) {
responseBody = responseBody.toString(encoding);
}
response.emit('data', responseBody);
process.nextTick(function() {
response.emit('end');
});
});
if (typeof callback === 'function') {
callback(response);
}
req.emit('response', response);
callnext();
});
});
};

@@ -106,2 +150,2 @@ return req;

module.exports = addGlobalInterceptor;
module.exports = addGlobalInterceptor;

@@ -45,4 +45,4 @@ var path = require('path')

this.statusCode = statusCode;
if (typeof(body) !== 'string') {
if (typeof(body) !== 'string' && !Buffer.isBuffer(body)) {
try {

@@ -62,3 +62,3 @@ body = JSON.stringify(body);

function replyWithFile(statusCode, filePath, headers) {
return reply.call(this, statusCode, fs.readFileSync(filePath, 'utf8'), headers);
return reply.call(this, statusCode, fs.readFileSync(filePath), headers);
}

@@ -189,2 +189,2 @@

module.exports = startScope;
module.exports = startScope;
{ "name" : "nock"
, "description" : "HTTP Server mocking for Node.js"
, "tags" : ["Mock", "HTTP", "testing", "isolation"]
, "version" : "0.1.7"
, "version" : "0.2.0"
, "author" : "Pedro Teixeira <pedro.teixeira@gmail.com>"

@@ -6,0 +6,0 @@ , "repository" :

@@ -442,2 +442,89 @@ var nock = require('../.')

req.end('mamma mia');
});
});
tap.test("abort request", function(t) {
var scope = nock('http://www.google.com')
.get('/hey')
.reply(200, 'nobody');
var req = http.request({
host: 'www.google.com'
, path: '/hey'
});
req.on('response', function(res) {
res.on('close', function(err) {
t.equal(err.code, 'aborted');
scope.done();
t.end();
});
res.on('end', function() {
t.true(false, 'this should never execute');
});
req.abort();
});
req.end();
});
tap.test("pause response before data", function(t) {
var scope = nock('http://www.mouse.com')
.get('/pauser')
.reply(200, 'nobody');
var req = http.request({
host: 'www.mouse.com'
, path: '/pauser'
});
req.on('response', function(res) {
res.pause();
var waited = false;
setTimeout(function() {
waited = true;
res.resume();
}, 500);
res.on('data', function(data) {
t.true(waited);
});
res.on('end', function() {
scope.done();
t.end();
});
});
req.end();
});
tap.test("pause response after data", function(t) {
var scope = nock('http://pauseme.com')
.get('/')
.reply(200, 'nobody');
var req = http.get({
host: 'pauseme.com'
, path: '/'
}, function(res) {
var waited = false;
setTimeout(function() {
waited = true;
res.resume();
}, 500);
res.on('data', function(data) {
t.false(waited);
res.pause();
});
res.on('end', function() {
t.true(waited);
scope.done();
t.end();
});
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc