Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je teste la page de profil d'un utlisateur, Je vérifier que le paramètre dans ma fonction view de mon controller soi bien passé dans l'url.

public function view($name)
    {
        // requête pour trouver un utilisateur avec le paramètre demandé 
        return view('users.view');
    }

Code de mon teste

public function testGetAProfilofAnUser()
    {
        $user = factory(User::class)->create(['confirmed' => 1, 'confirmation_token' => null, 'name' => 'test245']);
        $response = $this->call('GET','/profil',['name' => $user->name]);

        $this->assertEquals(200, $response->getStatusCode(), $response);
    }

La route que je teste :

Route::get('/profil/{name}', 'UsersController@view');

Ce que je veux

Avec le teste suivant. Je veux avoir un status 200. La route fonctionne bien.

Ce que j'obtiens

J'ai une erreur 404 au lieu de 200.
NotFoundHttpException in RouteCollection.php line 161
Il ne réussi pas trouver la route et pourtant elle écrit dans mon fichier des routes.

Merci de votre aide.

7 réponses


kndeye
Réponse acceptée

Bonjour, je pense que dans ta fonction de test testGetAProfilofAnUser, la manière dont tu passes le paramètre name à la methode call n'est pas bonne, essai de le mettre directement dans l'url par exemple:

 $response = $this->call('GET','/profil/'.$user->name);
lakamark
Auteur

Est-ce que c'est la bonne façons pour passer un paramètre pour tester? Ou c'est la technique d'avant?

TestResponse call(string $method, string $uri, array $parameters = array(), array $cookies = array(), array $files = array(), array $server = array(), string $content = null)

Voici la description de la méthode call et je sais pas si le $user->name tu le mets directement dans l'uri ou dans le tableau des paramètres.
As tu testé le code? Si oui qu'est ce que ça a donné??

lakamark
Auteur

Quand je mettais dans le tableau des paramètre le teste échoue, mais quand je l'essais avec ta solution ça fonctionne. Dans le router qu'il faut passer des paramètre d'une certaine façons.

// exemple d'une route avec des paramètre
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

C'est jusque moi j'ai mis la logique du code dans mon controller UsersController pour éviter que ma classe des route sois polué par trop de code.

Si ça fonctionne avec ce code dans le router, celà devrait bien fonctionner avec le controller, je vois pas de problème à ça.

lakamark
Auteur

Okay merci de ton aide.

Ce fut un plaisir