Skip to content

Commit a213169

Browse files
Chengxuanpaulmelnikow
authored andcommitted
fix: Mock responses should fire when timers are mocked (#1336)
Fix picked from #1335. Revert #1270. Fix #1334.
1 parent 556bb0d commit a213169

File tree

5 files changed

+38
-6
lines changed

5 files changed

+38
-6
lines changed

lib/intercept.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const _ = require('lodash')
1515
const debug = require('debug')('nock.intercept')
1616
const EventEmitter = require('events').EventEmitter
1717
const globalEmitter = require('./global_emitter')
18+
const timers = require('timers')
1819

1920
/**
2021
* @name NetConnectNotAllowedError
@@ -279,7 +280,7 @@ function overrideClientRequest() {
279280
if (isOff() || isEnabledForNetConnect(options)) {
280281
originalClientRequest.apply(this, arguments)
281282
} else {
282-
setImmediate(
283+
timers.setImmediate(
283284
function() {
284285
const error = new NetConnectNotAllowedError(
285286
options.host,

lib/request_overrider.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const debug = require('debug')('nock.request_overrider')
1313
const ReadableStream = require('stream').Readable
1414
const globalEmitter = require('./global_emitter')
1515
const zlib = require('zlib')
16+
const timers = require('timers')
1617

1718
function getHeader(request, name) {
1819
if (!request._headers) {
@@ -41,7 +42,7 @@ function setHeader(request, name, value) {
4142
}
4243

4344
if (name == 'expect' && value == '100-continue') {
44-
setImmediate(function() {
45+
timers.setImmediate(function() {
4546
debug('continue')
4647
request.emit('continue')
4748
})
@@ -142,7 +143,7 @@ function RequestOverrider(req, options, interceptors, remove, cb) {
142143
emitError(new Error('Request aborted'))
143144
}
144145

145-
setImmediate(function() {
146+
timers.setImmediate(function() {
146147
req.emit('drain')
147148
})
148149

@@ -301,7 +302,7 @@ function RequestOverrider(req, options, interceptors, remove, cb) {
301302
} else {
302303
error = new Error(interceptor.errorMessage)
303304
}
304-
setTimeout(emitError, interceptor.getTotalDelay(), error)
305+
timers.setTimeout(emitError, interceptor.getTotalDelay(), error)
305306
return
306307
}
307308
response.statusCode = Number(interceptor.statusCode) || 200
@@ -579,13 +580,13 @@ function RequestOverrider(req, options, interceptors, remove, cb) {
579580
}
580581

581582
// Stream the response chunks one at a time.
582-
setImmediate(function emitChunk() {
583+
timers.setImmediate(function emitChunk() {
583584
const chunk = responseBuffers.shift()
584585

585586
if (chunk) {
586587
debug('emitting response chunk')
587588
response.push(chunk)
588-
setImmediate(emitChunk)
589+
timers.setImmediate(emitChunk)
589590
} else {
590591
debug('ending response stream')
591592
response.push(null)

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"got": "^9.4.0",
4747
"hyperquest": "^2.1.3",
4848
"isomorphic-fetch": "^2.2.0",
49+
"lolex": "^3.0.0",
4950
"markdown-toc": "^1.2.0",
5051
"needle": "^2.2.2",
5152
"nyc": "^12.0.1",

tests/test_fake_timer.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict'
2+
3+
const nock = require('../.')
4+
const test = require('tap').test
5+
const request = require('request')
6+
const lolex = require('lolex')
7+
8+
// https://github.com/nock/nock/issues/1334
9+
test('one function returns successfully when fake timer is enabled', function(t) {
10+
const clock = lolex.install()
11+
nock('http://www.google.com')
12+
.get('/')
13+
.reply(200)
14+
15+
request.get('http://www.google.com', function(err, resp) {
16+
clock.uninstall()
17+
if (err) {
18+
throw err
19+
}
20+
t.equal(resp.statusCode, 200)
21+
t.end()
22+
})
23+
})

0 commit comments

Comments
 (0)