Как подделать косвенно вызванные функции пространства имен Typescript? - PullRequest
0 голосов
/ 17 апреля 2019

Предположим, задано следующее пространство имен:

export namespace CodeUnderTest {
    export function A(): void {
        B();
    }

    export function B(): void {
        console.log("B was called.");
    }
}

Как написать тест, который вызывает A() с поддельной реализацией B()?

Вот как я пыталсячтобы сделать это с 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-under-test.spec.ts, тестовые отпечатки B was called. Я ожидаю, что он напечатает Fake was called.

Я открыт длялюбое решение, не только реализованное с помощью Sinon.

...