Как поиздеваться с внедренной зависимостью JestJS в классе ES6? - PullRequest
0 голосов
/ 27 июня 2019

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

Это для последней версии узла и jest, я прочитал документацию по Jest, и, похоже, я ничего не ищу.

class A {

    getStr(): string {
        return "bob";
    }
}

class B {
    private a: A;

    constructor(a: A){
        this.a = a;
    }

    getA(): string {
        return a.getStr();
    }
}

const b = new B(mocked instance of A)

Я ожидаю, что смогу взаимодействовать с введенным макетом и посмотреть, был ли он вызван в модульном тестировании.

1 Ответ

0 голосов
/ 27 июня 2019

Предполагая, что вы хотите шпионить за функциями A, вы можете сделать это следующим образом (если вы хотите продолжать использовать нотацию классов):

class MockA {
    constructor() {
       this.getStr = jest.fn()
    }
}

const mockedA = new MockA()
const b = new B(mockedA)

Затем, чтобы проверить, что он вызывается,Вы можете сделать это следующим образом:

b.getA();
expect(a.getStr.mock.calls.length).toBe(1)

Чтобы создать макет без класса, вы можете сделать это следующим образом:

const mockedGetStr = jest.fn()
const b = new B({ getStr: mockedGetStr })
b.getA();
expect(a.getStr.mock.calls.length).toBe(1)
...