Jest передать издеваться над классом конструктору - PullRequest
0 голосов
/ 04 мая 2020

Допустим, у меня есть

class A {
  constructor(classB) {

  }
}

class B {

}

Как мне создать экземпляр class A в моем тесте и передать ему смоделированный class B? В основном я хочу сделать

a = new A(mockedClassB);

Чтобы указать c, мой вопрос о том, как создать mockedClassB, чтобы я мог передать это конструктору А.

1 Ответ

2 голосов
/ 05 мая 2020

Вот решение:

a.js:

export default class A {
  classB;
  constructor(classB) {
    this.classB = classB;
  }

  getName() {
    return this.classB.getName();
  }
}

b.js:

export default class B {
  getName() {
    return 'real name from b';
  }

  // add a new method later
  getAge() {
    return 23;
  }
}

a.test.js:

import A from './a';
import B from './b';
jest.mock('./b');

describe('61596704', () => {
  it('should pass', () => {
    const mockedClassBInstance = new B();
    mockedClassBInstance.getName.mockReturnValueOnce('mocked name from b');
    const a = new A(mockedClassBInstance);
    const actual = a.getName();
    expect(actual).toEqual('mocked name from b');
  });

  it('getAge method of B should be mocked as well', () => {
    const mockedClassBInstance = new B();
    jest.isMockFunction(mockedClassBInstance.getAge);
  });
});

Результаты модульных испытаний:

 PASS  stackoverflow/61596704/a.test.js (8.913s)
  61596704
    ✓ should pass (3ms)
    ✓ getAge method of B should be mocked as well (1ms)

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        10.486s
...