Spaces:
Runtime error
Runtime error
| const { promisify } = require('util') | |
| const Client = require('../client') | |
| const { buildMockDispatch } = require('./mock-utils') | |
| const { | |
| kDispatches, | |
| kMockAgent, | |
| kClose, | |
| kOriginalClose, | |
| kOrigin, | |
| kOriginalDispatch, | |
| kConnected | |
| } = require('./mock-symbols') | |
| const { MockInterceptor } = require('./mock-interceptor') | |
| const Symbols = require('../core/symbols') | |
| const { InvalidArgumentError } = require('../core/errors') | |
| /** | |
| * MockClient provides an API that extends the Client to influence the mockDispatches. | |
| */ | |
| class MockClient extends Client { | |
| constructor (origin, opts) { | |
| super(origin, opts) | |
| if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') { | |
| throw new InvalidArgumentError('Argument opts.agent must implement Agent') | |
| } | |
| this[kMockAgent] = opts.agent | |
| this[kOrigin] = origin | |
| this[kDispatches] = [] | |
| this[kConnected] = 1 | |
| this[kOriginalDispatch] = this.dispatch | |
| this[kOriginalClose] = this.close.bind(this) | |
| this.dispatch = buildMockDispatch.call(this) | |
| this.close = this[kClose] | |
| } | |
| get [Symbols.kConnected] () { | |
| return this[kConnected] | |
| } | |
| /** | |
| * Sets up the base interceptor for mocking replies from undici. | |
| */ | |
| intercept (opts) { | |
| return new MockInterceptor(opts, this[kDispatches]) | |
| } | |
| async [kClose] () { | |
| await promisify(this[kOriginalClose])() | |
| this[kConnected] = 0 | |
| this[kMockAgent][Symbols.kClients].delete(this[kOrigin]) | |
| } | |
| } | |
| module.exports = MockClient | |