VS Code Jest и Cypress intellisense не работают должным образом с Chai

#visual-studio-code #jestjs #intellisense #cypress

#visual-studio-code #jestjs #intellisense #cypress

Вопрос:

Я использую Jest в качестве платформы модульного тестирования, и приведенный ниже intellisense верен:

введите описание изображения здесь

Однако, когда я устанавливаю Cypress "cypress": "^3.2.0" , тот же код теперь отображает ошибку Property 'toMatch' does not exist on type 'Assertion'. Did you mean 'match'? . Причина этого IMO в том, что Cypress устанавливает типизацию под node_modules/cypress/types/chai/index.d.ts и VS Code выбирает их для intellisense. И Jest, и Cypress зависят от библиотеки утверждений Chai. Intellisense после установки Cypress:


введите описание изображения здесь

Есть ли способ указать VS Code, какой Chai intellisense использовать в определенной папке? Или есть какой-то способ указать это в jsconfig.json файле?

Ответ №1:

Была такая же проблема с cypress и jest.

Я решил это, создав два файла jsconfig.json

cypress/jsconfig.json

 {
  "typeAcquisition": { "include": ["cypress"] }
}
 

а затем один для моей папки src

src/jsconfig.json

 {
  "typeAcquisition": { "include": ["jest"] }
}
 

Перезапустил VSCode, и он работал, как ожидалось

Комментарии:

1. Это единственное решение, которое работает для меня.

Ответ №2:

Решение состояло в том, чтобы создать псевдонимы для тех глобальных переменных, которые представлены в Jest, и украсить эти переменные @type в JSDoc. Итак, я создал файл jestGlobals.js в том же каталоге, где находятся мои тесты.

jestGlobals.js файл: (Я включил только одну глобальную для простоты, но вы бы сделали то же самое для всех глобальных переменных):

 /** @type {jest.Expect} */
// @ts-ignore
let expect = global.expect

export { expect }
 

Затем я просто импортирую эти переменные в свои *.spec.js файлы:

 import { expect } from './jestGlobals'
 

Теперь, когда я использую эти псевдонимы, я получил правильный intellisense следующим образом:
введите описание изображения здесь

Ответ №3:

Я тоже столкнулся с этой проблемой.

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

 /// <reference types="jest" />
 

(Директива с тройной косой чертой) в верхней части вашего файла набора тестов предоставит вам правильные типы jest.

Примечание: вы тоже должны быть @types/jest установлены!

Диалог VS Code с правильной ссылкой на тип

Комментарии:

1. Я собираюсь отредактировать комментарий. Вы тоже должны быть @types/jest установлены!