如何伪造Typescript命名空间的间接调用函数?
假设给定了以下命名空间:如何伪造Typescript命名空间的间接调用函数?,typescript,mocking,mocha.js,sinon,Typescript,Mocking,Mocha.js,Sinon,假设给定了以下命名空间: export namespace CodeUnderTest { export function A(): void { B(); } export function B(): void { console.log("B was called."); } } 我如何编写一个使用B()的伪实现调用a()的测试 以下是我如何尝试与Sinon合作: import * as sinon from 'sinon'
export namespace CodeUnderTest {
export function A(): void {
B();
}
export function B(): void {
console.log("B was called.");
}
}
我如何编写一个使用B()
的伪实现调用a()
的测试
以下是我如何尝试与Sinon合作:
import * as sinon from 'sinon';
import { CodeUnderTest } from './code-under-test';
describe('CodeUnderTest', () => {
it('calls fake', () => {
sinon.replace(CodeUnderTest, 'B', () => {
console.log("Fake was called.");
});
CodeUnderTest.A();
});
})
当我使用mocha-r ts node/register code und test.spec.ts运行它时,调用了测试打印B。
我希望它打印false。
我对任何解决方案都持开放态度,而不仅仅是使用Sinon实现的解决方案。如果您要查看生成的A
请直接引用B
,而不是命名空间成员(CodeUnderTest.B
)。因此,当您将其替换为fake时,A
不受影响。如果您查看生成的A
则直接引用B
,而不是命名空间成员(CodeUnderTest.B
)。因此,当您将其替换为false时,A
不会受到影响