Понять полезность издевательств с Jest - PullRequest
0 голосов
/ 28 мая 2019

Я вообще не могу понять полезность насмешек. Смотри, у меня есть следующий модуль:

function Code() {
  this.generate = () => {
    const result = 'code124';
    return result;
  };
}

module.exports = Code;

Теперь я хочу проверить это с шуткой:

const Code = require('../lib/code');

jest.mock('../lib/code', () => {
  return jest.fn().mockImplementation(() => {
    return {
      generate: () => [1, 2, 3]
    };
  });
});

describe('Code', () => {
  test('returns the code "code123"', () => {
    const code = new Code();
    expect(code.generate()).toBe('code123');
  });
});

Итак ... Этот тест будет в порядке, но ... Мой код не так ... какой смысл в том, чтобы высмеивать, если я могу установить правильный результат, даже если мой код неправильный?

1 Ответ

1 голос
/ 28 мая 2019

Ты НЕ должен издеваться над тестируемым устройством. Вы должны издеваться над его зависимостями.

например:

всякий раз, когда у вас есть зависимость в реализации:

const dependency = require('dependency');

function Code() {
  this.generate = () => {
    const result = 'code' + dependency.getNumber();
    return result;
  };
}

module.exports = Code;

вы сможете изменить его результаты, чтобы иметь возможность тестировать все сценарии, не используя фактическую реализацию вашей зависимости:

const dependency = require('dependency');
const Code = require('../lib/code');
jest.mock('dependency');

describe('Code', () => {

    describe('when dependency returns 123', () => {
      beforeAll(() => {
        dependency.getNumber.mockReturnValue('123');
      });

      it('should generate code123', () => {
        const code = new Code();
        expect(code.generate()).toEqual('code123');
      });
    });

    describe('when dependency returns 124', () => {
      beforeAll(() => {
        dependency.getNumber.mockReturnValue('124');
      });

      it('should generate code123', () => {
        const code = new Code();
        expect(code.generate()).toEqual('code124');
      });
    });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...