Nano Hash - криптовалюты, майнинг, программирование

Cypress вызывает ошибки типа в шутливых утверждениях

Я использовал react-testing-library так же, как @testing-library/jest-dom/extend-expect. Я установил Cypress вчера, и теперь у меня появляются ошибки Typescript на всех моих сопоставителях jest:

Property 'toEqual' doesn't exist on type 'Assertion'. Did you mean 'equal'?

Похоже, он получает тип expect из неправильной библиотеки утверждений или что-то в этом роде? Кроме того, expect(...).to.equal(...) тоже не работает.

Я действительно пытался установить @types/jest, и yarn, похоже, преуспел, но он не указан в моем package.json devDependencies.

Вот мой tsconfig

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "noImplicitAny": false,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": false,
    "noEmit": true,
    "jsx": "react",
    "skipDefaultLibCheck": true,
    "types": [
      "node",
      "cypress",
      "jest"
    ]
  },
  "include": [
    "src"
  ]
}

Я также упомяну, что все мои cy вызовы в моих тестах на кипарис получают cy is not defined ошибку от ESLint.


Ответы:


1

Я вчера столкнулся с этой проблемой. Кажется, что то, что вы говорите, правильно, cypress и jest объявляют типы для expect. В этом случае, похоже, подобрана декларация кипариса. Вот проблема репозитория кипариса по этому поводу:

https://github.com/cypress-io/cypress/issues/1603

Решение, упомянутое там, сработало для меня. Вам нужно исключить файлы спецификации шутки из tsconfig.json, а затем объявить tsconfig.spec.json, где они снова явно включены.

tsconfig.json:

{
  ...,
  "exclude": [
    "**/*.spec.ts"
  ]
}

tsconfig.spec.json:

{
  "extends": "./tsconfig.json",
  "include": [
    "**/*.spec.ts"
  ],
  ...
}

Благодаря этому оба моих приложения (angular 8) компилируются нормально, и я могу без проблем запускать тесты jest. Вот еще один пример, упомянутый в проблеме, с реализованным аналогичным исправлением:

https://github.com/neiltownsley/react-typescript-cypress/pull/1/files#diff-e5e546dd2eb0351f813d63d1b39dbc48R29

06.12.2019

2

Существует официальное репозиторий Cypress, в котором показано, как решить именно эту проблему https://github.com/cypress-io/cypress-and-jest-typescript-example

Мне не удалось заставить этот метод работать в одном из моих проектов, поэтому я использую его как обходной путь:

import { expect } from '@jest/globals';
05.12.2020

3

Это сработало для меня в моем tsconfig.json

Мне пришлось добавить

  "include": ["src/**/*"],

Полный код здесь

{
  "compilerOptions": {
    "outDir": "./dist/",
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es5",
    "jsx": "react",
    "allowJs": true,
    "allowSyntheticDefaultImports" : true,
    "esModuleInterop" : true,
    "sourceMap": true,
    "experimentalDecorators": true
  },
  "include": ["src/**/*"],
  "exclude": [
    "node_modules",
    "**/*.spec.ts"
  ]
}
16.05.2020
  • Для меня это тоже было ключом. добавление src/** в корень tsconfig.json решило эту проблему после просмотра других настроек в примере репозитория: github.com/cypress-io/cypress-and-jest-typescript-example. 09.04.2021

  • 4

    В моем случае помогает только одно: добавление "types": ["jest"] к "compilerOptions":

    {
      "compilerOptions": {
        ...
        "types": ["jest"],
       ...
      },     
    }
    
    29.07.2020
  • У меня это не работает. 12.02.2021
  • то же самое - не работает 16.03.2021

  • 5

    Самый простой способ решить эту проблему - добавить эту строку в tsconfig.json:

      "include": [
        "src/**/*.ts"
      ],
    

    Я прилагаю свой файл tsconfig для лучшего понимания. Вы можете увидеть дополнение в строках 3-5.

    {
      "compileOnSave": false,
      "include": [
        "src/**/*.ts"
      ],
      "compilerOptions": {
        "baseUrl": "./",
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "downlevelIteration": true,
        "experimentalDecorators": true,
        "module": "esnext",
        "moduleResolution": "node",
        "importHelpers": true,
        "target": "es2015",
        "typeRoots": [
          "node_modules/@types"
        ],
        "lib": [
          "es2018",
          "dom"
        ]
      },
      "angularCompilerOptions": {
        "fullTemplateTypeCheck": true,
        "strictInjectionParameters": true
      }
    }
    
    17.07.2021
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..