Я начинаю с 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) и написать эти типы тестов, или достаточно ли хорош компилятор машинописного текста?
Заранее спасибо!