[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
João Gabriel de Santana Lopes
Criador João Gabriel de Santana Lopes 08/08/2023

Estou fazendo a aula https://academy.especializati.com.br/aula/mock-classe-com-mockery-e-spies e o metodo shouldRecive não está sendo reconhecido.
Preciso de ajuda para resolver

Tentei colocar o codigo todo aqui mas da erro 

 Atenção!

O campo text não pode conter mais de 10000 caracteres.

 

$mockPayment->shouldReceive('makePayment')->andReturn(true);
Criador João Gabriel de Santana Lopes 08/08/2023

There was 1 error:

 

1) Tests\Core\Payment\PaymentControllerUnitTest::test_payment

Error: Call to a member function makePayment() on null

 

/var/www/src/Core/Payment/PaymentController.php:17

/var/www/tests/Unit/Core/Payment/PaymentUnitTest.php:20

 

ERRORS!

Tests: 8, Assertions: 14, Errors: 1.

Script vendor/bin/phpunit handling the phpunit event returned with error code 2

João Gabriel de Santana Lopes
Criador João Gabriel de Santana Lopes 08/08/2023
<?php

namespace Tests\Core\Payment;

use Core\Payment\PaymentController;
use Core\Payment\PaymentInterface;
use Mockery;
use PHPUnit\Framework\TestCase;
use stdClass;

class PaymentControllerUnitTest extends TestCase
{
    public function test_payment()
    {
        $mockPayment = Mockery::mock(stdClass::class, PaymentInterface::class);
        $mockPayment->shouldReceive('makePayment')->andReturn(true);
       
       
        $payment = new PaymentController($mockPayment);
        $response = $payment->execute();

        $this->assertTrue($response);

    }

    protected function tearDown(): void
    {
        Mockery::close();

        parent::tearDown();
    }

}
João Gabriel de Santana Lopes
Manager Carlos Ferreira 08/08/2023

Olá, João Gabriel!
Tudo bem?

Seu mock está certo.

Tem o código completo no GitHub?
Preciso ter uma visão geral para te ajudar.

Carlos Ferreira
Criador João Gabriel de Santana Lopes 08/08/2023

Upei no github professor

https://github.com/jglopesdev/curso-php-laravel-tdd

Aguardo retorno!

Muito obrigado

João Gabriel de Santana Lopes
Manager Carlos Ferreira 08/08/2023

Vou rodar agora o seu projeto, pra te dar um feedback.

Carlos Ferreira
Manager Carlos Ferreira 08/08/2023

Achei seu erro, está aqui:
https://github.com/jglopesdev/curso-php-laravel-tdd/blob/main/src/Core/Payment/PaymentController.php#L11

Deve ficar assim:
$this->payment = $payment;

Ou, apenas:
public function __construct(private PaymentInterface $payment)
{
}

Carlos Ferreira
Criador João Gabriel de Santana Lopes 08/08/2023

Fiz essa alteração no PaymentController, mas não resolveu o problema, o metodo shouldReceive ainda está dando erro.

Pode me ajudar?

 

João Gabriel de Santana Lopes
Manager Carlos Ferreira 08/08/2023

Aquele erro resolveu, agora é seu mock que está errado, precisa retornar um objeto, e está returnando um booleno.

Carlos Ferreira
Criador João Gabriel de Santana Lopes 08/08/2023

Mas professor, meu mock está igual o seu https://ibb.co/tKMjfFb olha o print do video.

Desculpe mas ainda não consegui entender.. estou travado no curso

 

 

 

João Gabriel de Santana Lopes
Manager Carlos Ferreira 08/08/2023

Me dê detalhes do erro, que te ajudo resolver.

No aguardo amigo!

Carlos Ferreira
Criador João Gabriel de Santana Lopes 08/08/2023

Mas eu já detalhei, até upei no github o meu código e enviei print mostrando que está igual ao codigo da aula.

Infelizmente estou com a impressão que não está querendo ajudar.

o shouldReceive fica com uma cobrinha de erro vermelha embaixo.

$mockPayment->shouldReceive('makePayment')->andReturn(true);

 

João Gabriel de Santana Lopes
Manager Carlos Ferreira 08/08/2023

Queria um print do erro, seria mais rápido te ajudar, mas sem problemas, eu rodo o seu projeto aqui mais tarde (IGUAL JÁ FIZ ANTES =D)

Carlos Ferreira
Criador João Gabriel de Santana Lopes 08/08/2023

Eu postei o erro no dia 08 aqui

Segue novamente

CRIADOR João Gabriel de Santana Lopes

08/08/2023

There was 1 error:

 

1) Tests\Core\Payment\PaymentControllerUnitTest::test_payment

Error: Call to a member function makePayment() on null

 

/var/www/src/Core/Payment/PaymentController.php:17

/var/www/tests/Unit/Core/Payment/PaymentUnitTest.php:20

 

ERRORS!

Tests: 8, Assertions: 14, Errors: 1.

Script vendor/bin/phpunit handling the phpunit event returned with error code 2

João Gabriel de Santana Lopes
Manager Carlos Ferreira 08/08/2023

Mesmo depois da alteração o mesmo erro?

Carlos Ferreira
Manager Carlos Ferreira 08/08/2023

Rodei aqui para sumiular o erro, e NÃO é o mesmo do dia 08/08!! ;-)
O novo erro (isso faz total diferença no suporte): https://prnt.sc/-hKofTtNBdFS

"Return value must be of type object, bool returned"
--

Achei o seu erro, sua interface está errada, precisa retornar um bool e não um object:
https://github.com/especializati/php-laravel-tdd/blob/php-tdd/src/Core/Payment/PaymentInterface.php#L9

--

Se tiver dúvidas, pode contar sempre comigo. TMJ!

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!