4
respostas

Parse error

<?php

namespace Alura\BuscadorDeCursos\Tests;

use Alura\CourseFinder\CourseFinder;
use GuzzleHttp\ClientInterface;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\StreamInterface;
use Symfony\Component\DomCrawler\Crawler;

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(StreamInterface::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 CourseFinder($this->httpClientMock, $crawler);
        $cursos = $buscador->find($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]);
    }
}

executando o teste me diz que estou com um parse error na última linha, como se as {} estivessem erradas

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

4 respostas

Boa tarde,

Consultando a documentação do PHP percebi que o fechamento da sintaxe 'heredoc' não pode ter nada antes dela mesmo, nem sequer identação. Seu "FIM;" tem que estar no canto sem nada antes dele.

<?php
class foo {
    public $bar = <<<EOT
bar
EOT;
}
?>

Sim, mas meu fechamento está colado no canto sem nada antes nem depois dele como na imagem acima :S

Estranho, no exemplo que vc colocou acima tem a identação da função, creio que nem isso pode. Fora isso não encontrei nada de errado :/

Desde o PHP 7.3 essa sintaxe de heredoc é permitida. Qual sua versão do PHP?

Sempre que for postar códigos no fórum, coloque entre 3 crases (`), assim o código fica formatado. :-)

Fora esse detalhe de versão, tudo parece ok.