Bonjour,

Voila je rencontre un petit problème avec mon code. Je suis entraine de tester l'enregistrement d'un nouvelle utlisateur.

Ce que je fais

Le teste suivant permet de tester la fonction register de mon controller RegisterController en luis envoyant les information que utilisateur aurait remplir par un formulaire. Avoir un nouvelle utlisateur dans ma table users

 /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        if (!$this->recaptchaIsValid($request)) {
            return redirect(route('register'))->withInput($request->all())->with('error', "Sorry, the captcha is invalid.");
        }
        $this->validator($request->all())->validate();
        event(new Registered($user = $this->create($request->all())));
        $user->notify(new SignUpNotification());
        return redirect(route('login'))->with('success', "Your accunt has been created. You should to confirm with an email confirmation.");
    }
public function testCreateAnNewUser()
    {
        $uncreatedUser = $this->makeAnUser(['name' => 'Demo', 'email' => 'test@test.com', 'status' => 'unconfirmed']);
        $response = $this->post('/register', $uncreatedUser->toArray());
        $response->assertRedirect(route('login'));
        $response->assertSessionHas('success');
        $this->assertEquals(1, User::count());
    }

Ce que je veux

Le teste passe au vert.

Ce que j'obtiens

Quand je teste la redirection. Il y a un comportement étrange :

Time: 1.13 seconds, Memory: 22.00MB

There was 1 failure:

1) Tests\Feature\UserRegisterTest::testCreateAnNewUser
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'http://www.lakamarkv1.com/login'
+'http://www.lakamarkv1.com'

/var/www/sandbox.test/lakamark/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:198
/var/www/sandbox.test/lakamark/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:143
/var/www/sandbox.test/lakamark/tests/Feature/UserRegisterTest.php:27

FAILURES!
Tests: 2, Assertions: 7, Failures: 1.

La fonction makeAnUser() fait juste généré une factory :

**
     * Create an user instance. It will not recorded in the database
     * @param string[] $data
     * @return mixed
     */
    public function makeAnUser(array $data = [])
    {
        return factory(User::class)->make($data);
    }

Lravel me redirige ver la page principale du site '/'. Dans ma fonction register() je redirige vers la route '/login' avec un message de succès qu'il va recevoir pour confirmer son compte.

Merci de votre aide.

2 réponses


Je pense que ce qu'il se passe c'est que quand on s'enregistre, on est automatiquement connecté. Or, quand on va sur la route login et qu'on est connecté, on est automatiquement redirigé vers la page principale.

lakamark
Auteur

Par défaut Laravel connecte automatiquement l'utilsateur une foit connecté. J'ai mis en place un système de confirmation de compte pour éviter les robots. Dans la fonction register() originale de Laravel :

 /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

J'ai enlever cette ligne :

   $this->guard()->login($user);

J'ai modifier la redirection vers la page de login :

return redirect(route('login'))->with('success', "Account created");

J'ai de la misère à trouver d'où viens cette mauvaise redirection. J'écrase la fonction original par ma propre logique dans mon controller RegisterController qui est dans mon namespace App