Skip to content

Commit

Permalink
fix: Mock responses should fire when timers are mocked (#1335)
Browse files Browse the repository at this point in the history
Revert #1270. Fix #1334.
  • Loading branch information
Chengxuan authored and paulmelnikow committed Jan 2, 2019
1 parent 0c4edd6 commit cb56669
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 8 deletions.
5 changes: 3 additions & 2 deletions lib/intercept.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ var RequestOverrider = require('./request_overrider'),
_ = require('lodash'),
debug = require('debug')('nock.intercept'),
EventEmitter = require('events').EventEmitter,
globalEmitter = require('./global_emitter');
globalEmitter = require('./global_emitter'),
timers = require('timers');


/**
Expand Down Expand Up @@ -269,7 +270,7 @@ function overrideClientRequest() {
if(isOff() || isEnabledForNetConnect(options)) {
originalClientRequest.apply(this, arguments);
} else {
setImmediate(function () {
timers.setImmediate(function () {
var error = new NetConnectNotAllowedError(options.host, options.path);
this.emit('error', error);
}.bind(this));
Expand Down
13 changes: 7 additions & 6 deletions lib/request_overrider.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ var EventEmitter = require('events').EventEmitter,
debug = require('debug')('nock.request_overrider'),
ReadableStream = require('stream').Readable,
globalEmitter = require('./global_emitter'),
zlib = require('zlib');
zlib = require('zlib'),
timers = require('timers');

function getHeader(request, name) {
if (!request._headers) {
Expand Down Expand Up @@ -41,7 +42,7 @@ function setHeader(request, name, value) {
}

if (name == 'expect' && value == '100-continue') {
setImmediate(function() {
timers.setImmediate(function() {
debug('continue');
request.emit('continue');
});
Expand Down Expand Up @@ -142,7 +143,7 @@ function RequestOverrider(req, options, interceptors, remove, cb) {
emitError(new Error('Request aborted'));
}

setImmediate(function() {
timers.setImmediate(function() {
req.emit('drain');
});

Expand Down Expand Up @@ -299,7 +300,7 @@ function RequestOverrider(req, options, interceptors, remove, cb) {
} else {
error = new Error(interceptor.errorMessage);
}
setTimeout(emitError, interceptor.getTotalDelay(), error);
timers.setTimeout(emitError, interceptor.getTotalDelay(), error);
return;
}
response.statusCode = Number(interceptor.statusCode) || 200;
Expand Down Expand Up @@ -536,13 +537,13 @@ function RequestOverrider(req, options, interceptors, remove, cb) {
}

// Stream the response chunks one at a time.
setImmediate(function emitChunk() {
timers.setImmediate(function emitChunk() {
var chunk = responseBuffers.shift();

if (chunk) {
debug('emitting response chunk');
response.push(chunk);
setImmediate(emitChunk);
timers.setImmediate(emitChunk);
}
else {
debug('ending response stream');
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"eslint": "^5.0.0",
"hyperquest": "^2.1.3",
"isomorphic-fetch": "^2.2.0",
"lolex": "^3.0.0",
"markdown-toc": "^1.2.0",
"needle": "^2.2.2",
"nyc": "^12.0.1",
Expand Down
23 changes: 23 additions & 0 deletions tests/test_fake_timer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
'use strict';

const nock = require('../.');
const test = require('tap').test;
const request = require('request');
const lolex = require('lolex');

// https://github.com/nock/nock/issues/1334
test('one function returns successfully when fake timer is enabled', function(t) {
let clock = lolex.install();
nock('http://www.google.com')
.get('/')
.reply(200);

request.get('http://www.google.com', function(err, resp) {
clock.uninstall();
if (err) {
throw err;
}
t.equal(resp.statusCode, 200);
t.end();
});
});

0 comments on commit cb56669

Please sign in to comment.