【问题标题】:'flutter test' running on docker image causing testfile.dill.track.dill change and then causing test failure on CI environment在 docker 映像上运行的“颤振测试”导致 testfile.dill.track.dill 更改,然后导致 CI​​ 环境测试失败
【发布时间】:2020-05-10 01:47:21
【问题描述】:

我在 gitlab-ci 环境中运行 flutter test 时遇到单元测试错误。以下是我已经尝试解决问题但尚未找到解决方案的完整列表。我在github/flutter 中打开了一个问题,想知道它是否真的是颤振中的一个错误,但如果有任何其他建议,我很高兴收到您的来信。如果此问题需要,所有日志都在 GitHub 问题中。

复制步骤

由于专有原因,我无法粘贴所有颤振代码。我会尽可能详细地帮助解决方案,并随时询问更多详细信息。

主要目标是让flutter test 在 gitlab-ci 上运行,在 docker 映像上。因此,我在我的 MacBook 上创建了一个本地 docker 镜像(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. 在 Docker 映像上运行 flutter test。至少运行两次,因为如下所示,第一个命令可能会成功,实际上会导致进一步的测试失败。

预期结果:

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 成功运行,得出的结论是,错误是由于 docker 映像中的flutter test 更改了testfile.dill.track.dill 引起的。

  1. 在 macOS 上运行 flutter test(与 docker 镜像共享同一个项目目录)
  2. 运行cp build/testfile.dill.track.dill ~ 保存文件副本
  3. 在 docker vm 上运行flutter 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. 在 docker vm 上运行 flutter test
    上面的测试失败了
  6. 运行cp ~/testfile.dill.track.dill build/testfile.dill.track.dill(恢复更改的文件)
  7. 在 docker vm 上运行 flutter test
    上面的测试成功了,尽管它再次更改了 testfile.dill.track.dill 并在进一步的测试中再次开始失败

【问题讨论】:

    标签: docker flutter dart continuous-integration flutter-test


    【解决方案1】:

    这是flutter包版本的问题。

    当您创建 docker 映像并运行 flutter pub get 时,它会从头开始构建软件包,因此会升级一些软件包并进行少量更新。

    这可能会导致本地镜像和 docker 镜像的版本不同。

    因此,请确保在本地和 dockerized 相同的环境中运行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 2018-06-03
      • 1970-01-01
      相关资源
      最近更新 更多