Почему testDouble не может имитировать стороннюю функцию?

#node.js #test-double #testdoublejs

Вопрос:

У меня есть локальный модуль с функцией, которую я хочу смоделировать, используя tetDouble для NodeJS

Это функция, которую я хочу протестировать:

 import {supportsAPL} from "skills-lib"

export function example(thing: any): boolean {
    if (!supportsAPL(thing)) {
        throw new Error("numbers only!")
    }
    return true
}
 

И это настоящий тест:

 const td = require("testdouble")
require("testdouble-jest")(td, jest)

const supportsAPL = td.replace("skills-lib")
import {example} from "../lambda/custom/numbers-only"
// const example = require("../lambda/custom/numbers-only")

describe("ex", () => {
    it("ex2", async () => {
        td.when(supportsAPL("a string")).thenReturn(true) // tee-hee, this is silly
        const result = example("a string")
        expect(result).toMatch("true")
    })
})
 

Код работает нормально, но когда я запускаю тест, я получаю:

 supportsAPL is not a function
TypeError: supportsAPL is not a function
 

Единственный способ, который я нашел, чтобы обойти эту проблему,-это создать оболочку для локального модуля и вместо этого издеваться над оболочкой.

У кого-нибудь есть лучший способ решить эту проблему?