Hello :)
Fais voir le code de ce fichier: Tests\App\Blog\Actions\BlogActionTest
Et montres aussi le code de ce fichier: Double\stdClass\P1 (d'ailleurs tu as ajouté Double dans l'autoload?)
Décrivez ici votre problème ou ce que vous cherchez à faire.
Ce que je veux
public function setUp(): void
{
/pour passer les parametres du BlogAction
on cree des faux objets renderer et PDo et Router
en utilisant prophecy de phpunit qui cree des faux objects
/
$this->renderer = $this->prophesize(RendererInterface::class);
ici je veux ecrire $this->renderer->render() ( render est une function de RendererInterface
//PDO
$this->pdo = $this->prophesize(\PDO::class);
$this->pdo = $this->prophesize(\PDOStatement::class);
$this->router = $this->prophesize(Router::class);
$this->action = new BlogAction(
$this->renderer->reveal(),
$this->pdo->reveal(),
$this->router->reveal()
);
}
Décrivez ce que vous cherchez à obtenir.
Ce que j'obtiens
$this->renderer n'a pas cette fonction render ..
Décrivez vos éventuelles erreurs ou ce que vous obtenez à la place de ce que vous attendez :
PHPUnit 9.5.9 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 00:00.951, Memory: 8.00 MB
There was 1 error:
1) Tests\App\Blog\Actions\BlogActionTest::testShowRedirect
Prophecy\Exception\Doubler\MethodNotFoundException: Method Double\stdClass\P1::reveal() not found.
F:\Desktop\MyFrameWork\tests\Blog\Actions\BlogActionTest.php:53
Hello :)
Fais voir le code de ce fichier: Tests\App\Blog\Actions\BlogActionTest
Et montres aussi le code de ce fichier: Double\stdClass\P1 (d'ailleurs tu as ajouté Double dans l'autoload?)
Bonjour popotte
j'ai soulutionné le problème comme ssuit:
1: j'ai installé via composer phpunit 9.5.9 au lieu de phpunit 10.0.16
2: j'ai installé "phpspec/prophecy-phpunit": "^2.0"
3 et dans le code j'utilise "use ProphecyTrait;
ainsi dans composer.json j'ai:
"require-dev": {
"squizlabs/php_codesniffer": "^3.7",
"robmorgan/phinx": "^0.13.4",
"fakerphp/faker": "^1.21",
"phpunit/phpunit": "9.5.9",
"phpspec/prophecy-phpunit": "^2.0"
}
et le code :
<?php
namespace Tests\App\Blog\Actions;
use App\Blog\Actions\BlogAction;
use Framework\Renderer\RendererInterface;
use Framework\Router;
use GuzzleHttp\Psr7\ServerRequest;
use PHPUnit\Framework\TestCase;
use Prophecy\Argument;
use Prophecy\PhpUnit\ProphecyTrait;
use stdClass;
/**
@TODO:Define a class here
*/
class BlogActionTest extends TestCase
{
/*
/*
/*
private $router;
use ProphecyTrait;
public function setUp(): void
{
/pour passer les parametres du BlogAction
on cree des faux objets renderer et PDo et Router
en utilisant prophecy de phpunit qui cree des faux objects
/
$this->renderer=$this->prophesize(RendererInterface::class);
$this->renderer->render(Argument::any())->willReturn('') ;
//faux article
$post = new stdClass;
$post->id=9;
$post->slug= 'demo-test';
//PDO
$this->pdo = $this->prophesize(\PDO::class);
$pdoStatement = $this->prophesize(\PDOStatement::class);
$this->pdo->prepare(Argument::any())->willReturn($pdoStatement);
$pdoStatement->execute(Argument::any())->willReturn(true);
$pdoStatement->fetch()->willReturn($post);
$this->router = $this->prophesize(Router::class);
$this->action = new BlogAction(
$this->renderer->reveal(),
$this->pdo->reveal(),
$this->router->reveal()
);
}
public function testShowRedirect()
{
$request = (new ServerRequest('GET', '/'))
->withAttribute('id', 9)
->withAttribute('slug', 'demo');
$response = call_user_func_array($this->action,[$request]);
$this->assertEquals(301, $response->getStatusCode());
}
}
Finalement le test passe au vert.
Merci à vous popotte
!