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.