Laravel 7: Невозможно протестировать Mock Socialite - PullRequest
0 голосов
/ 16 июня 2020

Я использую Laravel 7 и не могу проводить интеграционные тесты с Socialite. Я видел много примеров того, как заставить его работать на Laravel 5.x, но не могу найти ни одного для версии 7.

Тест не проходит, потому что имитируемый информационный объект пользователя возвращает нулевые переменные.

Контроллер:

public function callback($provider)
{
    $getInfo = Socialite::driver($provider)->user();

    \Illuminate\Support\Facades\Log::debug(gettype($getInfo->name));

    $user = $this->createUser($getInfo, $provider);

    auth()->login($user);

    return redirect()->to('/home');
}

Маршрут:

Route::get('/callback/{provider}', 'SocialController@callback')->name('SocialiteCallback');

Тест:

use RefreshDatabase;

/**
 * @test
 */
public function testSocialiteTwitterLogin() {
    $abstractUser = Mockery::mock('Laravel\Socialite\Two\User');

    $abstractUser
            ->shouldReceive('getId')
            ->andReturn(rand())
            ->shouldReceive('getNickName')
            ->andReturn(uniqid())
            ->shouldReceive('getName')
            ->andReturn(uniqid())
            ->shouldReceive('getEmail')
            ->andReturn(uniqid() . '@gmail.com')
            ->shouldReceive('getAvatar')
            ->andReturn('https://en.gravatar.com/userimage');

    Socialite::shouldReceive('driver->user')->andReturn($abstractUser);

    $this->get(route('SocialiteCallback', ['provider' => 'twitter']))
            ->assertStatus(302)
            ->assertRedirect(route('home'));
}

Фактический журнал ошибок сбоя:

[2020-06-16 16:44:48] testing.ERROR: SQLSTATE [HY000]: General error: 1 no such table: users (SQL: select * from "users", где "provider_id" - это нулевой предел 1) {"исключение": "[объект] (Illuminate \ Database \ QueryException (код: HY000): SQLSTATE [HY000]: общая ошибка: 1 нет такой таблицы: пользователи (SQL: выберите * из \" пользователей \ "где \" provider_id \ "- это нулевой предел 1) в / var / www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connection.php: 671)

Мои другие тесты для аутентификации пользователя с помощью фабрики баз данных работают нормально, поэтому я не знаю, почему вышеуказанное не работает.

...