Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mocha оверрайдит типы jest, начиная с testplane релизов #996

Open
1 task done
jehy opened this issue Aug 11, 2024 · 8 comments
Open
1 task done
Assignees

Comments

@jehy
Copy link

jehy commented Aug 11, 2024

Verify latest release

  • I verified that the issue exists in the latest Hermione release

Hermione version

No response

Last Hermione version that worked

No response

Which area(s) of Hermione are affected? (leave empty if unsure)

No response

Link to the code that reproduces this issue or a replay of the bug

No response

Reproduction steps

  1. используем проект с джест и гемионой
  2. всё падает, так как подтягиваемые типы из hermione->mocha перекрывают типы jest для функций с тем же названием

Actual Behavior

всё падает

Expected Behavior

хочется чтобы не падало

Which Node.js version are you using?

20

@jehy
Copy link
Author

jehy commented Aug 11, 2024

вроде правится в https://github.com/gemini-testing/testplane/pull/995/files - влейте, пожалуйста.

@KuznetsovRoman KuznetsovRoman self-assigned this Aug 12, 2024
@KuznetsovRoman
Copy link
Member

Привет. jest и hermione тесты находятся в разных файлах? Для jest используете глобальные it / describe / ... или импортируете в каждом файле?

@jehy
Copy link
Author

jehy commented Aug 12, 2024

  1. тесты находятся в разных файлах
  2. используем глобальные
  3. Последняя работающая на текущий момент гермиона это 8.9.6, так что в целом сетап правильный и падать не должен. Пытался поменять на testplane ближайшей версии 8.10.1 . Самый последний не заводится, но судя по мастеру - там должна быть та же проблема.
  4. сорри за не подробный репорт, в 3 часа ночи писал уже. Если что, можно меня на стаффе найти.

@KuznetsovRoman
Copy link
Member

KuznetsovRoman commented Aug 12, 2024

  1. тесты находятся в разных файлах
  2. используем глобальные

В таком случае я не вижу иного варианта, кроме как использовать два различных файла tsconfig.json.
Тогда можно будет ограничить compilerOptions.types и указать, чтобы для testplane тестов использовались типы из testplane, а для jest - типы из jest. Например, вот так будет выглядеть compilerOptions в tsconfig.json для testplane тестов:

    "compilerOptions": {
        "types": [
            "testplane"
        ]
    }

@jehy
Copy link
Author

jehy commented Aug 12, 2024

Хмм. Такс

  1. Извините, что гнал, понял, что глобалы без моки в прод зависимостях не будут работать, и иначе не сделаешь.
  2. Да, у нас в текущей версии есть compilerOptions - но только для гермионы
  3. Судя по всему, в текущей версии у нас выходит, что приоритет у jest типов, а конкретно для директории гермиона тестов типы оверрайдятся на её. А при обновлении на testplane, видимо, идёт приоритет загрузки по алфавитному порядку имени пакета, и резолв происходит обратный.
  4. Если для гермиона тестов, которые все лежат в одной директории, легко написать types, и там в целом не будет ничего не хватающего, то написать их для всего остального проекта (где, как принято, тесты лежат рядом с кодом) - весьма затруднительно, поскольку там не только node и jest, но и куча всего другого... Да и явно держать там всю огромную перепись типов не хочется...

В общем, забавная бага из-за смены алфавитного порядка, видимо. Не знаю, можете ли вы её как-то полечить со своей стороны, но было бы здорово добавить её в мануал по миграции - наверняка не мы одни на это наступим. А для нас это видимо пока блокер...

... Интересно, а можно продолжать публиковать testplane в пакете hermione? Это бы решило проблему :)

@jehy jehy changed the title @types/mocha в продакшн зависимостях mocha оверрайдит типы jest, начиная с testplane релизов Aug 12, 2024
@KuznetsovRoman
Copy link
Member

KuznetsovRoman commented Aug 14, 2024

В общем, забавная бага из-за смены алфавитного порядка, видимо. Не знаю, можете ли вы её как-то полечить со своей стороны, но было бы здорово добавить её в мануал по миграции - наверняка не мы одни на это наступим. А для нас это видимо пока блокер...

Да, в гайд по миграции нужно это добавить.

Полечить со своей стороны - сможем, но, к сожалению, только в testplane@9 - в следующей версии мы планируем перестать использовать глобальные декларации по умолчанию, а предоставлять их отдельным пакетом тем, кому это нужно, но это мажор, поэтому только в testplane@9: #854 (comment)

@jehy
Copy link
Author

jehy commented Aug 14, 2024

Да, звучит как решение, спасибо!

@jehy jehy closed this as completed Aug 14, 2024
@KuznetsovRoman
Copy link
Member

Если для гермиона тестов, которые все лежат в одной директории, легко написать types, и там в целом не будет ничего не хватающего, то написать их для всего остального проекта (где, как принято, тесты лежат рядом с кодом) - весьма затруднительно

Если в корне проекта лежит папка src с исходниками, а гермиона-тесты лежат в отдельной директории, то при переходе на testplane в этой отдельной директории с гермиона-тестами можно описать следующий tsconfig.json:

{
    "compilerOptions": {
        "types": [
            "testplane"
        ]
    }
}

Чтобы в папке src были именно jest тайпинги, можно сделать следующее:

  • По пути, например, src/types/jest.d.ts создаем файл:
/// <reference types="jest" />
  • В tsconfig.json в корне проекта вставляем этот путь в include секцию до src. Например, вот так:
{
    "compilerOptions": {
        "include": ["./src/types/jest.d.ts", "./src"],
    }
}

Теперь в директории src будут использоваться именно jest тайпинги у it, describe, expect

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants