Retourne toujours une erreur 404 durant mes teste

Par lakamark, il y a 9 ans


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, il y a 9 ans

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, il y a 9 ans

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

kndeye, il y a 9 ans
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, il y a 9 ans

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.

kndeye, il y a 9 ans

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

lakamark, il y a 9 ans

Okay merci de ton aide.

kndeye, il y a 9 ans

Ce fut un plaisir