Разработка через тестирование - Тестирование входного параметра при использовании TypeScript - PullRequest
0 голосов
/ 28 мая 2020

Я начинаю с TDD и задавался вопросом, нужно ли мне тестировать входные параметры в среде TypeScript?

Например, у меня есть функция, которая принимает строку и анализирует json если он действителен

export const tryParseJSON = (jsonString: string) => {
  if (jsonString) {
    try {
      const o = JSON.parse(jsonString);

      // Handle non-exception-throwing cases:
      // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
      // but... JSON.parse(null) returns null, and typeof null === "object",
      // so we must check for that, too. Thankfully, null is falsey, so this suffices:
      if (o && typeof o === 'object') {
        return o;
      }
    } catch (e) {}
  }

  return false;
};

Я написал для него следующие тесты:

describe('Helper Function tryParseJSON', () => {
  it('should return false if input parameter is a string', async () => {
    expect(tryParseJSON('1234')).toEqual(false);
  });
  it('should return false if input parameter is null', async () => {
    expect(tryParseJSON(null)).toEqual(false);
  });
  it('should return false if input parameter is false', async () => {
    expect(tryParseJSON(false)).toEqual(false);
  });
  it('should return true if input parameter is valid JSON', async () => {
    const jsonString = JSON.stringify({ test: 'testing' });
    expect(tryParseJSON(jsonString)).toEqual({ test: 'testing' });
  });
});

Однако, поскольку я использую "ts-jest", который использует проверку типов, тесты не запускаются потому что null и false не являются строками.

Теперь вопрос в том, стоит ли деактивировать проверку типов (только в ts-jest, а не в самом TypeScript) и написать эти типы тестов, или достаточно ли хорош компилятор машинописного текста?

Заранее спасибо!

...