speedskater / babel-plugin-rewire

A babel plugin adding the ability to rewire module dependencies. This enables to mock modules for testing purposes.
843 stars 90 forks source link

__Rewire__ is not a function #235

Open stoplion opened 3 years ago

stoplion commented 3 years ago

A file has a few exported functions...

export function foo() {}
export function bar() {}
export function baz() {}

In a test file...

import * as pathFileHelpers from 'path/to/file';

pathFileHelpers.__Rewire__({
   readFileSync: () => {
      return 'test test test'
    },
})

_get__(...).__Rewire__ is not a function

Why?

SO Question

BenjaminVanRyseghem commented 2 years ago

I got the same, but I figure out that if the exported function are "heavy" enough, it works.

By example

function bar() {
    return 42;
}

export function foo() {
    return 60;
}

This doesn't work, but

function bar() {
    return 42;
}

export function foo() {
    return bar();
}

does work.

Even trickier:

function baz() { return bar(); }

function bar() { return 42; }

export function foo() {
    return 60;
}

work as well, even though the added code is unused and unreachable. But it looks like having inner calls is mandatory