Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro ao executar Teste com Buscador (Uncaught Error: Call to undefined function each()) no PHPUnit

Estou usando php 8.0.3 (por limitações não posso atualizar para outra versão, nem realizar downgrade), o composer instalou automaticamente a versão compatível com o PHP, mas ao executar os testes, recebo diversos erros sobre a função each() em arquivos diversos do PHPUnit.

Alguém saberia como corrigir? PS a maioria dos erros é igual à imagem, mudando apenas os arquivos de onde o erro se origina

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
4 respostas

Olá amigo.
O erro que você está encontrando está relacionado ao uso da função each() no PHPUnit, que foi descontinuada no PHP 7.2 e removida nas versões posteriores do PHP, incluindo a versão 8.0.3 que você está usando.
O problema ocorre porque o PHPUnit ainda depende dessa função em versões mais antigas.
A função each() era usada para iterar sobre arrays, mas no PHP moderno, você deve usar um método diferente para realizar a iteração, como foreach ou array_walk.
Teste ai e me avise se deu certo.
Bons estudos.

Então, mas não rola atualizar na mão todo o código do phpUnit que usa each, como posso proceder nesse caso? (No meu código não tem nenhuma função obsoleta em relação à versão atual do meu PHP)

solução!

Então amigo.
Tenta isso aqui:
Embora você não possa alterar o código do PHPUnit manualmente, uma abordagem que pode funcionar é garantir que você está usando a versão mais recente possível do PHPUnit que ainda seja compatível com o PHP 8.0.3, ou seja, a versão 9.x do PHPUnit.
O PHPUnit 9.x já corrigiu o uso da função each() e deve funcionar corretamente no seu PHP 8.0.3 sem a necessidade de alterar o código da ferramenta.
Para garantir isso, basta rodar:

composer require --dev phpunit/phpunit:^9.0

Isso vai instalar a versão 9.x do PHPUnit, que é compatível com PHP 8.0.3 e não deve ter o problema da função each().
Outra coisa que você pode tentar é garantir que você está rodando o PHPUnit via Composer em vez de uma instalação global ou por algum outro meio. Quando você usa o PHPUnit via Composer, você garante que está utilizando a versão que foi instalada pelo Composer, que deve ser a correta para o seu ambiente PHP.

./vendor/bin/phpunit

Se você não estiver rodando o PHPUnit dessa maneira, tente essa abordagem.
Às vezes, versões globais do PHPUnit podem ser mais antigas e incompatíveis com a sua versão de PHP.
Teste ai as possibilidades e me envie um feedback.
Aguardo...

Achei o erro, o composer estava usando qualquer versão quando chamava apenas o phpunit direto via cli

Ex.:

phpunit tests/teste.php

Mas ao usar o da pasta bin diretamente em vendor, ele usa a versão correta :D

./vendor/bin/phpunit tests/test.php