testdouble.js icon indicating copy to clipboard operation
testdouble.js copied to clipboard

Stubbing a CJS module from an ESM

Open benkiefer opened this issue 8 months ago • 0 comments

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 (or yarn --version) output: 10.5.2 or 10.8.1
  • [x] npm ls testdouble (or yarn 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.

benkiefer avatar Jun 26 '24 16:06 benkiefer