Как разрешить конфликт типов между Testcafe и Jest? («Не удается повторно объявить переменную с областью действия блока «тест»»)

#typescript #vue.js #jestjs #testcafe #ts-jest

Вопрос:

У меня есть проект Vue 2, созданный с помощью интерфейса командной строки Vue, в котором некоторое время проводились тесты Testcafe. Теперь я пытаюсь добавить еще и шутливые тесты.

Когда я запускаю свое приложение ( npm run serve = vue-cli-service serve ), я получаю следующие ошибки машинописи из-за объявления глобальных функций как Jest, так и Testcafe test() :

 ERROR in /Users/.../app/node_modules/@types/jest/index.d.ts(44,13):
44:13 Cannot redeclare block-scoped variable 'test'.
    42 | declare var fit: jest.It;
    43 | declare var xit: jest.It;
  > 44 | declare var test: jest.It;
       |             ^
    45 | declare var xtest: jest.It;
    46 |
    47 | declare const expect: jest.Expect;
ERROR in /Users/.../app/node_modules/testcafe/ts-defs/index.d.ts(2397,15):
2397:15 Cannot redeclare block-scoped variable 'test'.
    2395 |
    2396 | declare const fixture: FixtureFn;
  > 2397 | declare const test: TestFn;
         |               ^
    2398 |
Version: typescript 3.7.5
 

Существует старая проблема Testcafe, в которой говорится, что это было исправлено в 2019 году, и что:

По умолчанию при компиляции любого исходного файла TypeScript автоматически загружаются только определения из каталога node_modules/@types.

Но, как вы можете видеть выше, моя конфигурация все еще загружает типы node_modules/testcafe/ts-defs/index.d.ts Testcafe , даже когда я не запускаю Testcafe, а просто запускаю приложение.

Я создал приложение skeleton Vue 2 с той же проблемой и загрузил его на Github здесь. Проблема с типом не возникала до тех пор, пока я не добавил тест по адресу tests/testcafe/Testcafe.spec.ts .

Что я могу сделать, чтобы избавиться от конфликта такого типа? Есть ли что-то простое, что я могу сделать, чтобы остановить загрузку типов Testcafe при запуске приложения?

Ответ №1:

В моем проекте добавление "tests/testcafe" exclude свойства в tsconfig.json останавливает появление ошибки при запуске сервера разработки, и тесты TestCafe все равно будут выполняться (что было неожиданностью). Поэтому я думаю, что сказать Typescript (запускаемый Vue CLI / Webpack?) не компилировать тесты Testcafe-это один из ответов.

Я чувствую, что, вероятно, есть другой ответ, в котором типы TestCafe игнорируются, но я не знаю, как этого добиться. (Я пытался сделать это несколькими разными способами.)