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

Erro para encontrar a classe TestCase

Boa tarde. Estou tendo o seguinte erro:

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

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

9 respostas

Oi Karolina, tudo bem?

Aparentemente você esqueceu de importar a classeTestCase, o erro informa que a classe não foi encontrada.

Importe o TestCase desse namespace: use PHPUnit\Framework\TestCase;.

Já faz um tempinho que não mecho com PHP, mas acredito que seja isso.

Bons estudos.

Boa tarde. Parece que achou a classe, mas agora estou tendo erro nesse método: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi Karolina,

Não dá para ver o código porque a mensagem de erro atrapalha na visualização.

Veja se a linha, na qual a mensagem de erro encobre, está dessa maneira: $stream = $this->createMock(Stream::class);. O erro informa que o método expects não foi encontrado, provavelmente o mock do Stream não criado corretamente.

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

Está como copiei o código do professor

Deixe como eu falei para ver se funciona: $stream = $this->createMock(Stream::class);

Importe a classe Stream também: use GuzzleHttp\Psr7\Stream;

Caso continue informando o erro tente rodar os testes, porque às vezes é problema no VS Code, se não rodar você volta ao fórum com erro que o compilador informou . Eu fiz esse treinamento há bastante tempo, abri o projeto e o VS Code informa vários métodos não encontrados também, porém funciona corretamente.

Boa noite. Ainda nada. Tentei executar no terminal depois da correção e acontece isso: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Karollina, tem como mostrar o erro completo?

Bom dia. Desculpe a demora.

O erro que aparece no terminal é esse:

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

E em passando o mouse em cima do método:

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

Código completo:

<?php

use Psr\Http\Message\StreamInterface;
use GuzzleHttp\Psr7\Stream;
use Symfony\Component\DomCrawler\Crawler;
use Alura\BuscadorDeCursos\Buscador;
use PHPUnit\Framework\TestCase;

class TestBuscadorDeCursos extends TestCase
{
    private $httpClientMock;
    private $url = 'url-teste';

    protected function setUp(): void
    {
        $html = <<<FIM
        <html>
            <body>
                <span class="card-curso__nome">Curso Teste 1</span>
                <span class="card-curso__nome">Curso Teste 2</span>
                <span class="card-curso__nome">Curso Teste 3</span>
            </body>
        </html>
        FIM;

        $stream = $this->createMock(Stream::class);
        $stream
            ->expects($this->once())
            ->method('__toString')
            ->willReturn($html);

        $response = $this->createMock(ResponseInterface::class);
        $response
            ->expects($this->once())
            ->method('getBody')
            ->willReturn($stream);

        $httpClient = $this
            ->createMock(ClientInterface::class);
        $httpClient
            ->expects($this->once())
            ->method('request')
            ->with('GET', $this->url)
            ->willReturn($response);

        $this->httpClientMock = $httpClient;
    }

    public function testBuscadorDeveRetornarCursos()
    {
        $crawler = new Crawler();
        $buscador = new Buscador($this->httpClientMock, $crawler);
        $cursos = $buscador->buscar($this->url);

        $this->assertCount(3, $cursos);
        $this->assertEquals('Curso Teste 1', $cursos[0]);
        $this->assertEquals('Curso Teste 2', $cursos[1]);
        $this->assertEquals('Curso Teste 3', $cursos[2]);
    }
}
solução!

Oi Karolina,

Não está reconhecendo a classe TestCase do PHPUnit, parece ser algum problema com PHPUnit, talvez a instalação. É bom refazer os passos da aula e caso não consiga você abre outro tópico para que outra pessoa possa te auxiliar.

Essa aula do treinamento é apenas um spoiler de uma ótima formação de testes do mesmo instrutor, vale a pena dar uma conferida.