Laravel PHPUnit не обновляется после каждого теста - PullRequest
0 голосов
/ 13 мая 2018

Я сейчас проверяю логин и регистрируюсь. Проблема в том, что база данных не обновляется после каждого теста, поэтому она вызывает ошибку.

Ошибка, которую я получаю: идентификатор пользователя должен быть 1, но из-за того, что база данных не сбрасывается после каждого теста, идентификатор пользователя равен 2. Я создаю нового пользователя в своем логине и регистрирую тест.

1) Tests\Unit\RegisterTest::successful
Failed asserting that a row in the table [users] matches the attributes {
    "id": 1,
    "username": "JohnRock",
    "email": "hello@email.com"
}.

Found: [
    {
        "id": 2,
        "username": "JohnRock",
        "email": "hello@email.com",
        "password": "$#^TTUG#$ORY#$&*RY#$YRY#$:RY:#$YRU$#YRP",
        "remember_token": null,
        "created_at": "2018-05-13 03:41:35",
        "updated_at": "2018-05-13 03:41:35"
    }
].
<?php

namespace Tests\Unit;

use App\User;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class RegisterTest extends TestCase
{

    use RefreshDatabase;

    /**
     * A basic test example.
     *
     * @return void
     */


    /** @test */
    public function successful_register()
    {
        $username  = 'JohnRock';
        $email     = 'hello@email.com';
        $password  = 'fjIRHJV@#(*UH(@#*H78))';

        $user = [
            'username'              => $username,
            'email'                 => $email,
            'password'              => $password,
            'password_confirmation' => $password
        ];

        $response = $this->post('/register', $user);

        $this->assertDatabaseHas('users', [
            'id'       => 1,
            'username' => $username,
            'email'    => $email
        ]);
    }

}
<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;

class LoginTest extends TestCase
{

    use RefreshDatabase;

    /**
     * A basic test example.
     *
     * @return void
     */


    /** @test */
    public function login_successful()
    {
        $user = factory('App\User')->create();

        $response = $this->post('/login', [
            'username' => $user->username,
            'password' => $user->password
        ]);

        $response->assertRedirect('/');
    }

}

1 Ответ

0 голосов
/ 13 мая 2018

Ваш LoginTest, кажется, работает до RegistrationTest.И поскольку вы создаете там пользователя, он автоматически получает идентификатор 1.

. RefreshDatabase не повторяет миграцию для каждого теста, он обновляет миграции перед началом.

Я рекомендую удалить id из assertDatabaseHas, так как на самом деле ничего не добиваются, проверяя на id:

$this->assertDatabaseHas('users', [
    'username' => $username,
    'email'    => $email,
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...