Я только начал изучать TypeScript и попробовал какое-то простое приложение с модульным тестом jest (используя ts-jest):
простой модуль app.ts:
function greet(person: string): string {
return `Hello, ${person}`;
}
exports.greet = greet;
простой код app.spec.ts:
const greetObject = require('../app');
greetObject.greet(1);
describe('greet function', () => {
it('should return greeting', () => {
expect(greetObject.greet('Dude')).toEqual('Hello, Dude');
});
it('should throw type exception', () => {
const spy = jest.spyOn(greetObject, 'greet');
greetObject.greet(1);
/** @todo what should happen ? */
});
});
и вопрос: я должен получить ошибку типа или нет? На самом деле, я не получаю здесь никаких ошибок.
Но если я вызову приветствие с неправильным типом параметра в файле app.ts, весь набор тестов завершится ошибкой.
Я что-то упустил в модульном тестировании TypeScript?
УПД. Требование преобразовано в импорт ES6. Диагностика TypeScript теперь работает, но я до сих пор не знаю, смогу ли я что-нибудь сделать с неправильными типами и протестировать такие ситуации. Любые советы приветствуются.
should I receive type error or not ?
Не здесь.
То, что вы тестируете, - это вывод JS вашего файла TS.
Ошибки TS — это ошибки время компиляции.
I still don't know if I can do anything with wrong types and test those situations.
В TypeScript нет проверки типов во время выполнения, поскольку среда выполнения — это нет TypeScript, а JavaScript.
Если вы хотите проверить какой-либо полученный объект, вы должны реализовать настоящие функции проверки.
может быть полезно:
Как проверить тип объекта во время выполнения в TypeScript?
Значит, ошибки типов находятся на уровне компиляции, а не в модульных тестах?
Обычно я бы сказал так, да. Однако, возможно, вам нужна некоторая проверка, например, если вы получаете объект из внешнего источника. В этом случае вам нужно проверить тип во время выполнения, но это не эквивалентно ошибке tpye TypeScript. Вы можете поиграть с охранниками типов TypeScript, которые могут вам помочь (см., например, связанные вопросы и ответы в моем ответе), но вам придется написать механизм проверки самостоятельно.
В моем случае не помогло,
ts-jest
по-прежнему игнорирует передачу недопустимых типов, хотя я использую импорт ES6 (( Можете показать свои файлы конфигурации?