У меня модульный тест с ошибками flutter test
в среде gitlab-ci. Ниже приведен полный список вещей, которые я уже сделал, пытаясь решить проблему, но пока не нашел решения. Я открыл вопрос в github / flutter , задаваясь вопросом, может ли это быть на самом деле ошибкой во флаттере, но был бы очень рад услышать от вас, если будут сделаны какие-либо другие предложения. Все журналы находятся в выпуске GitHub, если необходимо в этом вопросе.
Шаги по воспроизведению
Из-за личных причин я не могу вставить весь свой код флаттера. Я постараюсь быть максимально подробным, чтобы помочь в решении, и не стесняйтесь спрашивать более подробную информацию.
Основная цель - запустить flutter test
на gitlab-ci, на docker изображение. Поэтому я создал локальный образ docker на своем MacBook (Dockerfile включен ниже, а также был перемещен в Docker Hub) для воспроизведения и отладки ошибки.
- Выполнить
docker pull isorensen/flutter-ubuntu:1.12.13-stable
- Выполнить
docker run -v [flutter_project_root_directory]:/app -it --rm isorensen/flutter-ubuntu:1.12.13-stable
- Выполнить
flutter test
на образе Docker. Выполните по крайней мере дважды, поскольку, как вы увидите ниже, первая команда может завершиться успешно и фактически приведет к сбою дальнейших тестов.
Ожидаемые результаты:
00:09 +14: All tests passed!
Фактические результаты:
00:12 +0 -1: faq: check if has values [E]
type 'MappedListIterable<MapEntry<int, dynamic>, dynamic>' is not a subtype of type 'List<dynamic>' in type cast
package:credifit/API/client.dart 307:80 ApiClient.getFaqs
00:12 +0 -2: faq: check first default question [E]
type 'MappedListIterable<MapEntry<int, dynamic>, dynamic>' is not a subtype of type 'List<dynamic>' in type cast
package:credifit/API/client.dart 307:80 ApiClient.getFaqs
00:18 +10 -3: getUserLoanInfos [E]
Instance of 'Fatal'
package:sdkgen_runtime/http_client.dart 30:5 SdkgenHttpClient._throwError
package:sdkgen_runtime/http_client.dart 82:15 SdkgenHttpClient.makeRequest
00:19 +10 -4: simulateInstallments [E]
type 'MappedListIterable<MapEntry<int, dynamic>, dynamic>' is not a subtype of type 'List<dynamic>' in type cast
package:credifit/API/client.dart 313:236 ApiClient.simulateInstallments
00:19 +10 -4: Some tests failed.
В чем проблема
Поскольку эта проблема не возникает в моей локальной среде (с запущенной macOS Catalina, как подробно описано в журналах ниже), что я заметил, с fswatch
в папке моего проекта и с flutter test
в обеих средах (с общим каталогом проекта), только два файла были «затронуты» (не обязательно изменено): - .packages - .testfile.dill.track.dill
И после запуска diff
для обоих файлов, до и после flutter test
, заметил, что только testfile.dill.track.dill
было изменено.
Наконец, когда я выполнил приведенную ниже последовательность, он flutter test
запустился успешно, решив, что ошибка вызвана изменением testfile.dill.track.dill
, вызванным flutter test
внутри docker образа.
- Запуск
flutter test
на macOS (общий доступ к одному проекту) попробуйте docker image) - Запустите
cp build/testfile.dill.track.dill ~
, чтобы сохранить копию файла - Запустите
flutter test
на docker vm (в первый раз тест выполняется успешно, но изменяет файл test.dill.track.dill) - Выполнить
diff build/testfile.dill.track.dill ~/testfile.dill.track.dill
Результат: Binary files build/testfile.dill.track.dill and /Users/eduardosorensen/testfile.dill.track.dill differ
- Выполнить
flutter test
на docker vm
Тест выше не удается - Выполнить
cp ~/testfile.dill.track.dill build/testfile.dill.track.dill
(чтобы восстановить измененный файл) - Выполнить
flutter test
на docker vm
Вышеприведенный тест успешно выполнен, хотя он снова изменяется testfile.dill. track.dill и снова начинает проваливаться на дальнейших тестах