2016-12-06 2 views
0

Что я пытаюсь сделать, это написать единичные тесты в Typcript для существующей библиотеки функций, которые у нас были в течение некоторого времени, которые были написаны с использованием простой JS. Вся наша логика страниц также проста в JS. Некоторые из этих функций бросали исключения, когда вводились неправильные типы. Например:Тестирование для TypeError с использованием TypScript и Jasmine

Таким образом, второй аргумент должен содержать строку, имя свойства, для которой вы хотите получить значения. Внутри функции pluck есть проверка типа, проверяющая, что массив объектов был передан, когда это не удается, он вызывает TypeError.

Так написать тест, подтверждающий, что правильный тип объекта, был принят в я написал бы его, как в равнинных JS:

expect(function(){ Collection.pluck([{"a":1},{"a":2}], 0); }).toThrowError(TypeError); 

Однако в моем файле декларации у меня она определена как таковая:

declare namespace Collection { 
    function pluck(obj: Object, propertyName: string): any; 
} 

Так что, когда я иду, чтобы написать модульный тест, используя TS я получаю ошибку компиляции, очевидно: TS compile error

Так как же мне делать WHA t Я хочу без каких-либо изменений в функции? Есть ли что-то, что я могу настроить в TS, чтобы игнорировать это только для этого файла?

ответ

0

Вы можете попробовать отправить второй аргумент своего теста как строку, если вы в состоянии изменить тест.

expect(function(){ Collection.pluck([{"a":1},{"a":2}], '0'); }).toThrowError(TypeError); 

UPDATE: Вы используете машинопись, который уже делает проверку типов при компиляции фазы (transpilation в JS), как вы определяете тип в объявлении функции. Технически ваш код уже проходит тестовый пример. Если вам действительно нужна проверка типа с помощью модульного тестирования, вы должны сделать это для тех случаев, когда тип задан как «any», поскольку они не будут проверяться во время компиляции. ИЛИ проверьте здесь Unittesting in TypeScript

+0

Хотя это остановит ошибку TS, это провалит тест, потому что я тестирую, если он явно является строкой. Кроме того, я выполняю другие тесты, подобные этим, где я проверяю объекты, массивы, функции и т. Д., Где у меня тоже такая же проблема. –

+0

будет обновляться в ответ –

+0

Думаю, я мог бы использовать «any». Это просто странно, потому что он не отражает внутреннюю работу функции при использовании TS, но мы не можем начать использовать TS везде в нашем приложении, чтобы эта «ошибка» в определении не была замечена никем, кроме меня. Важно то, что скомпилированный JS остается тем же и продолжает бросать TypeError. –

Смежные вопросы