DEV Community

Rodrigo Rahman
Rodrigo Rahman

Posted on

Flutter 3.41 + Pub Workspaces: por que a cobertura de testes quebrou (e o que fazer)

O que aconteceu

Se você usa Pub Workspaces (monorepo com workspace: no root e resolution: workspace nos packages), pode ter notado um comportamento bem chato ao rodar testes com cobertura: o comando até executa, mas a cobertura sai zerada/vazia. Em workspaces, o pub faz uma resolução única (um pubspec.lock e um .dart_tool/package_config.json compartilhados na raiz), o que é ótimo para consistência… mas aumenta a chance de conflito quando alguma ferramenta/dep não está 100% alinhada com esse modo de resolução. ([Dart][1])

Sintoma típico

No package:test, o problema aparece como cobertura vazia, mesmo com testes passando — por exemplo, um retorno no formato:

  • {"type":"CodeCoverage","coverage":[]}

Isso foi reportado como bug do test ao usar resolution: workspace, com repro bem direto (monorepo + dart test --coverage). ([GitHub][2])

Por que isso bateu forte no Flutter 3.41

O ponto-chave é que o Flutter SDK tem pinned packages: alguns pacotes são fixados pelo SDK em versões específicas (incluindo dependências do flutter_test). Se seu app (ou suas deps) dependem desses pacotes, seu grafo de dependência precisa aceitar exatamente as versões pinadas — senão você fica “preso” numa faixa de versões. ([GitHub][3])

No caso desta treta, o Flutter 3.41 ficou travado em uma combinação que fazia o workspace cair numa versão do test que ainda tinha o bug de cobertura. A issue do Flutter descreve exatamente isso: o Flutter 3.41 “fica” no test 1.28 por causa do pin do test_api dentro do flutter_test, e o bug foi corrigido no test 1.29.0 — mas você não conseguia chegar nele por causa do pin. ([GitHub][4])

Como corrigir (o caminho recomendado)

A correção prática é: atualize para o hotfix que ajusta esse encaixe de versões. Na prática, a recomendação que circulou (e que resolve o cenário de workspaces + coverage) é estar no Flutter 3.41.1 (ou superior) e rodar:

  • flutter upgrade

Esse hotfix atualiza as dependências do flutter_test para voltar a permitir uma combinação compatível com o fluxo de cobertura em workspaces (incluindo o ajuste de compatibilidade do test_api). ([Instagram][5])

Se você não pode atualizar agora (workaround)

Se você está bloqueado (CI/produção/branch congelada), dá para resolver um package fora do workspace temporariamente, só para rodar validações/testes/cobertura naquele pacote.

A própria doc de workspaces sugere criar um pubspec_overrides.yaml no package e resetar o resolution — assim ele faz uma resolução independente ao rodar dart pub get dentro daquele diretório. ([Dart][1])

Exemplo (dentro de packages/seu_pacote/):

  • crie pubspec_overrides.yaml com:

    • resolution: (em branco)
  • rode dart pub get dentro do package

  • rode seus testes/cobertura ali

Próximo passo: evoluir no Flutter (e em IA aplicada)

Se você curte esse tipo de conteúdo “mão na massa” (bug real, solução real, e impacto em CI/produção), aqui vão 3 caminhos pra acelerar seu nível:

✅ 1) Academia do Flutter

Formação completa do zero ao avançado, com projetos reais, arquitetura, testes, performance e publicação.
Acesse: https://novo.academiadoflutter.com.br/

✅ 2) Academia das IAs

Pra aprender a usar IA no desenvolvimento do jeito certo: engenharia de contexto, workflows e produtividade real pra entregar features inteiras.
Acesse: https://academiadasias.com.br/

✅ 3) Workshop Flutter Experience

Evento 100% prático pra construir um app completo comigo, do começo ao fim, com foco em entrega.
Acesse: https://go.hotmart.com/N101339135N

--

https://github.com/flutter/flutter/issues/182314
https://raw.githubusercontent.com/flutter/flutter/3.41.1/CHANGELOG.md
https://github.com/dart-lang/test/issues/2570
https://dart.dev/tools/pub/workspaces
Enter fullscreen mode Exit fullscreen mode

Top comments (0)