'flutter test', работающий на docker образе, вызывающий изменение testfile.dill.track.dill, а затем вызывающий сбой теста в среде CI - PullRequest
1 голос
/ 23 января 2020

У меня модульный тест с ошибками flutter test в среде gitlab-ci. Ниже приведен полный список вещей, которые я уже сделал, пытаясь решить проблему, но пока не нашел решения. Я открыл вопрос в github / flutter , задаваясь вопросом, может ли это быть на самом деле ошибкой во флаттере, но был бы очень рад услышать от вас, если будут сделаны какие-либо другие предложения. Все журналы находятся в выпуске GitHub, если необходимо в этом вопросе.

Шаги по воспроизведению

Из-за личных причин я не могу вставить весь свой код флаттера. Я постараюсь быть максимально подробным, чтобы помочь в решении, и не стесняйтесь спрашивать более подробную информацию.

Основная цель - запустить flutter test на gitlab-ci, на docker изображение. Поэтому я создал локальный образ docker на своем MacBook (Dockerfile включен ниже, а также был перемещен в Docker Hub) для воспроизведения и отладки ошибки.

  1. Выполнить docker pull isorensen/flutter-ubuntu:1.12.13-stable
  2. Выполнить docker run -v [flutter_project_root_directory]:/app -it --rm isorensen/flutter-ubuntu:1.12.13-stable
  3. Выполнить 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 образа.

  1. Запуск flutter test на macOS (общий доступ к одному проекту) попробуйте docker image)
  2. Запустите cp build/testfile.dill.track.dill ~, чтобы сохранить копию файла
  3. Запустите flutter test на docker vm (в первый раз тест выполняется успешно, но изменяет файл test.dill.track.dill)
  4. Выполнить 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
  5. Выполнить flutter test на docker vm
    Тест выше не удается
  6. Выполнить cp ~/testfile.dill.track.dill build/testfile.dill.track.dill (чтобы восстановить измененный файл)
  7. Выполнить flutter test на docker vm
    Вышеприведенный тест успешно выполнен, хотя он снова изменяется testfile.dill. track.dill и снова начинает проваливаться на дальнейших тестах

1 Ответ

0 голосов
/ 06 февраля 2020

Это была проблема версий пакета флаттера.

Когда вы создаете образ docker и запускаете flutter pub get, он создает пакеты с нуля и, следовательно, обновляет некоторые пакеты с небольшими обновлениями.

Это может привести к различным версиям между локальным и docker образом.

Поэтому убедитесь, что вы запускаете тесты в одной и той же среде, локально и докеризированной.

...