2014-11-17 3 views
25

Настройка: У меня есть проект Node (чистый Node, без битов браузера), написанный в TypeScript. Я могу использовать компилятор TypeScript (tsc) из модуля typescript для компиляции кода. Все идет нормально.Как выполнить тесты Mocha, написанные на языке TypeScript?

Однако я хочу писать тесты с использованием Mocha, и именно там у меня проблемы. Я попытался --compilers ts:typescript, но я продолжаю получать ошибки, как:

error TS5023: Unknown compiler option 'compilers'. 

Похоже, в командной строке mocha заканчивает тем, что передается tsc, который, очевидно, не хорошо.

ответ

37

Для любого, кто пытался и имел проблемы с машинописи-требуют вы можете попробовать ts-node.

$ npm install -g ts-node 
$ mocha test.ts --require ts-node/register src/**/*.spec.ts 

также, что там было каким-то ongoing discussion о протестующей машинописи-требует в пользу TS-узле.

+0

Используя ts-node, мне трудно выполнять покрытие кода для тестов с использованием Стамбула (после запуска тестов мокки в глотках). Стамбул, похоже, не может переназначить исходные файлы TS (используя Стамбульский remapper). Любые возможные решения для этого? – calclavia

+2

Чтобы избежать множества осложнений, я прибегал к компиляции моих тестов, которые написаны в TypeScript с tsc в качестве предшественника для запуска тестов и обеспечения генерации исходных карт. Это позволяет мне отлаживать мои тесты в VS Code и не полагаться на requirecript-require или ts-node. – jpierson

+1

'typescript-require' уже устарел https://github.com/theblacksmith/typescript-require/issues/34#issuecomment-230915434 – martin

9

Не используйте этот ответ. requirecript-require не поддерживается, а ts-node - его замена. Оставляя этот ответ здесь для потомков.

Найдено. Модуль typescript на самом деле похож на «главную» функцию; он запускает компилятор, как только модуль загружается. Не очень красивый дизайн.

Я ткнул приемочные тесты Mocha, в которых показано, как использовать собственный компилятор для файлов foo. Они подключают его через механизм require.extensions. Я был на полпути, написав модуль, который просто вызывает tsc в командной строке, когда я понял, что кто-то должен был это сделать раньше. Так что это очень просто:

$ npm install typescript-require --save-dev 
$ mocha --compilers ts:typescript-require 
+0

Привет @Thomas, вам удалось сделать эту работу в браузере? –

+0

Не пробовал; командной строке было все, что мне нужно. – Thomas

+0

Я действительно не думаю, что это работает хорошо. Вы можете увидеть [мой родственный вопрос] (http://stackoverflow.com/questions/32996110/combine-mocha-typescript-and-watch), чтобы понять, почему. –

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