testdouble.js
testdouble.js copied to clipboard
Stubbing a CJS module from an ESM
Description
In the testdouble repo, I created examples/node-esm/test/lib/numbers-only-test.mjs
with the following code.
import assert from 'assert'
import mocha from 'mocha'
import * as td from 'testdouble'
mocha.describe('numbers-only', function () {
mocha.it.only('goes boom', async function () {
const isNumber = td.replace('is-number');
const numbersOnly = await import('../../lib/numbers-only.mjs')
td.when(isNumber('a string')).thenReturn(true) // tee-hee, this is silly
const result = numbersOnly.default('a string')
assert.equal(result, true)
});
});
Based on what I read from the docs, I would expect this code to pass, but whenever ../../lib/numbers-only.mjs
is loaded, the real is-number is resolved instead of the faked module.
Issue
the real module is being loaded instead of the fake.
Environment
- [x]
node -v
20.1.0 or 22.3.0: - [x]
npm -v
(oryarn --version
) output: 10.5.2 or 10.8.1 - [x]
npm ls testdouble
(oryarn list testdouble
) version: from the example
Failing Test
See above
Example Repo
See above
Runkit Notebook
- [ ] Create a Runkit notebook
- [ ] Invoke
var td = require('testdouble')
at the top - [ ] Verify the behavior your issue is concerned with by clicking "Run"
- [ ] Link to the Runkit here
Code-fenced Examples
var td = require('testdouble')
// Your steps here.