Bonjour,

Je fais mes premiers pas avec phpUnit que j'utilise dans Symfony 4.
Je parviens à tester les repository et les controllers simples, mais je bute sur la request.
Je cherche à simuler la récupération des données d'un formulaire avec un très classique :

$formDatas = $request->request->all();

Le problème, c'est qu'à chaque fois, j'ai une erreur qui m'indique que $request->request est null.

Voici la ligne de mon controller qui provoque l'erreur

// le constructeur :
    public function __construct(Request $request=null)
    {
        $this->setRequest($request);
       }
// la ligne sur laquelle le test bute :
 $formDaCtas = $this->getRequest()->request->all()["mf_plages_validation"];

Je commence par créer un objet qui sera retourné par getRequest().

    /**
     * @var ParameterBag
     */
    public $request = null;

    public function __construct(ParameterBag $parameterBag)
    {
        $this->request = $parameterBag;
    }

Je crée un ParameterBag que je remplis avec un tableau $fakeJson

        $parameterBag  = new ParameterBag($fakeJson);
        $parameterBag->set("mf_validation_plage",$fakeJson);

Je crée l'objet qui sera retourné par getRequest() auquel je passe le parameterBag

 $requestDatas = new FakeRequest($parameterBag);

Donc, à partir de maintenant, j'ai bien un objet $requestDatas qui possède une propriété $request qui est un objet parameterBag
Je construit la fakeRequest

$fakeRequest = $this
            ->getMockBuilder(Request::class)
            ->disableOriginalConstructor()
            ->setMethods(['getRequest'])
            ->getMock();

Je définis la méthode getRequest, qui va retourner le parameterBag

$request->method("getRequest")->willReturn($requestDatas);

Mais là : Error: Call to a member function all() on null

Comment dois-je donc m'y prendre ?

Merci beaucoup pour votre aide.

Aucune réponse