Насмешка над базовым классом с использованием Jest Framework - PullRequest
0 голосов
/ 10 января 2020

У меня есть базовый класс, который выглядит следующим образом.

class BaseClass {
  .....
  .....
  async request(options) {
    .......
    .......
  }
}

Это расширено другим классом, подобным этому.

const BaseClass = require('@myorg/base-class').BaseClass;

class MyClass extends BaseClass {

      async method1() {
        .............
        request()
        .............
      }

      async method2() {
        .............
        request()
        .............
      }

}

Теперь я использую jest для тестирования MyClass и это 2 метода, и имитировать BaseClass и пытаться отправить ложный ответ для его метода запроса. Так как мне нужно протестировать method1 и method2, мне нужно изменить макет возврата после первого. Я делаю так.

describe('MyClass', () => {
  afterEach(() => {
    jest.clearAllMocks();
    jest.resetAllMocks();
  });
  let MockClass = class BaseClass {
    request() {
      return {
        statusCode: 200,
        body: JSON.stringify({
          first_response: 'first_response'
        })
      };
    }
  };
  const mock = jest.mock('@myorg/base-class', () => {
    return {
      BaseClass: MockClass
    };
  });
  it('#method1 - test method one', async () => {
    const myClass = require('../src').myClass;
    const res = await myClass.method1();
    expect(res).toEqual('first_response');
  });

  it('#method2 - test method 2', async () => {
    mock.clearAllMocks();
    mock.resetAllMocks();
    MockClass = class BaseClass {
      request() {
        return {
          statusCode: 200,
          body: JSON.stringify({
            random_response: 'random_response'
          })
        };
      }
    };
    const myClass = require('../src').myClass;
    const res = await myClass.method2();
    expect(JSON.parse(res.body)).toEqual({
      random_response: 'random_response'
    });
    expect(res.statusCode).toEqual(200);
  });
});

Проблема в том, что после инициализации макета я не могу сбросить и назначить другое значение, как во втором тесте. Как мне этого добиться?

1 Ответ

0 голосов
/ 10 января 2020

У меня была похожая проблема в год go. У меня было 2 теста, вызывающих один и тот же смоделированный метод, но я хотел получить 2 разностных вывода.

Jest не предоставил достойного способа изменить макет после его создания, и я предполагаю, что они не изменились который. (Не могу связать ни один источник, извините, это какое-то время go).

У меня была возможность обсудить с некоторыми опытными и талантливыми программистами, и обходной путь был сделать тесты в двух разных файлах , с 2 реализациями для макета.

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

Пожалуйста, дайте мне знать, если у вас есть лучшее решение или исправление!

Удачи

...