gemini-testing / testplane

Testplane (ex-hermione) browser test runner based on mocha and wdio
https://testplane.io
MIT License
687 stars 62 forks source link

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

Open jehy opened 1 month ago

jehy commented 1 month ago

Verify latest 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 commented 1 month ago

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

KuznetsovRoman commented 1 month ago

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

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

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

    "compilerOptions": {
        "types": [
            "testplane"
        ]
    }
jehy commented 1 month ago

Хмм. Такс

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

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

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

KuznetsovRoman commented 4 weeks ago

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

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

Полечить со своей стороны - сможем, но, к сожалению, только в testplane@9 - в следующей версии мы планируем перестать использовать глобальные декларации по умолчанию, а предоставлять их отдельным пакетом тем, кому это нужно, но это мажор, поэтому только в testplane@9: https://github.com/gemini-testing/testplane/issues/854#issuecomment-2288386705

jehy commented 4 weeks ago

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

KuznetsovRoman commented 4 weeks ago

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

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

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

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