Laravel voyager с phpunit

#laravel-5 #phpunit #voyager

#laravel-5 #phpunit #voyager

Вопрос:

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

  public function A_admin_user_can_visit_the_admin_page()
    {
        DB::table('permissions')->insert(
            ['key' => 'browse_admin', 'id' => 1]
        );

        DB::table('roles')->insert(
            ['name' => 'admin', 'display_name' => 'Administrator']
        );

        DB::table('permission_role')->insert(
            ['permission_id' => 1, 'role_id' => 1]
        );

        $user = factory('AppUser')->create(['role_id' => 1]);
        $this->actingAs($user);
        $this->get('/admin')->assertStatus(200);
    }
  

Эти тесты работают нормально, если у меня есть правильные разрешения

     public function A_admin_can_browse_users_data()
    {
       $this->admin();
        $this->adminPermissions();
        $this->adminRoles();
        $user = factory('AppUser')->create(['role_id' => 1]);
        $this->actingAs($user);
        $this->get('/admin')->assertStatus(200);
//      dd(Voyager::canOrFail('browse_bread'));
        $this->get('/admin/users')->assertStatus(200);

    }
  

Здесь этот тест завершается неудачей, но я уверяю, что функции admin adminRoles и adminPermissions создали необходимые записи в базе данных, которые предоставляют моему пользователю полный доступ, даже когда я умираю и сбрасываю разрешения, которые я получаю true, поэтому проблема не может быть в разрешениях, что-то еще идет не так, и я не знаю, что это, любая помощь была бы оценена.

Ответ №1:

Voyager напрямую запрашивает файл маршрута в web.php вызывающий метод Voyager::routes() из-за этого laravel RouteServiceProvider не знает о новом файле маршрута в случае тестовой среды. Итак, чтобы устранить эту проблему, я сделал это обходное решение.

Просто добавьте приведенный ниже код в setUp() метод вашего тестового файла.

 Route::prefix('admin')
            ->namespace('AppHttpControllers')
            ->group(base_path('vendor/tcg/voyager/routes/voyager.php'));