Skip to content

A little helper for mocking chainable APIs with testdouble.js

Notifications You must be signed in to change notification settings

carlbennettnz/td-chain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔗 td-chain

If you use testdouble.js, you might have run into a bit of difficulty mocking chained APIs. In most cases, you should probably just avoid the problem. If you're sure you want to do this, td-chain should help a little.

Installation

npm install td-chain

Usage

Say you have a module ./test/subject that calls ./my/api like this:

module.exports = function subject() {
  return api('some args')
    .next('more args')
    .another('something else') // returns 42
}

You can mock out the call to api() like this:

const td = require('testdouble')
const chain = require('td-chain')

const api = td.replace('./my/api')
const result = Symbol()

td.when(
  chain(api)('some args')
    .next('more args')
    .another('something else')
).thenReturn(result)

const subject = require('./test/subject')

assert(subject() === result)

For comparison, without td-chain:

const td = require('testdouble')

const api = td.replace('./my/api')
const td2 = td.function()
const td3 = td.function()

const result = Symbol()

td.when(api('some args'))
  .thenReturn({ next: td2 })

td.when(td2('more args'))
  .thenReturn({ another: td3 })

td.when(td3('something else'))
  .thenReturn(result)

const subject = require('./test/subject')

assert(subject() === result)

About

A little helper for mocking chainable APIs with testdouble.js

Resources

Stars

Watchers

Forks

Packages

No packages published