Тестирование

Suggest edit

В настоящее время разработка качественного программного обеспечения тесно связана с автоматизированным тестированием. Поэтому пакет содержит инструменты тестирования, которые помогут вам упростить его.

Для их использования достаточно добавить трейт ScreenTesting в свой тестовый класс, например:

namespace Tests\Feature;

use Orchid\Support\Testing\ScreenTesting;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    use ScreenTesting;
    //...
}

После этого станет доступен новый метод получения данных экрана по имени маршрута:

public function testExampleScreen()
{
    $screen = $this->screen('platform.example');

    $screen->display()
        ->assertSee('Example screen');

    $screen
        ->method('showToast')
        ->assertSee('Hello, world! This is a toast message.');

    $screen
        ->method('showToast', [
            'toast' => 'Custom message'
        ])
        ->assertSee('Custom message');
}

Во многих случаях маршруты принимают параметры, например users/{user}/edit, чтобы их передать можно использовать метод:

$screen = $this->screen('platform.systems.users.edit')
    ->parameters([
        'user' => 1,
    ]);

Метод parameters добавляет значения только к GET параметрам.

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

// Create a single App\Models\User instance...
$user = User::factory()->create();

$screen = $this->screen('platform.example')->actingAs($user);

При запросе у вас может возникнуть 403 ошибка – которая означает что у пользователя недостаточно прав. Один из вариантов получить все доступные права через фасад Dashboard

use Orchid\Support\Facades\Dashboard;

// Create a single App\Models\User instance...
$user = User::factory()->create([
  'permissions' => Dashboard::getAllowAllPermission(),
]);

$screen = $this->screen('platform.example')->actingAs($user);

Более элегантным решением будет определить метод в самой фабрике:

class UserFactory extends Factory {

    // ...
   
    /**
     * Indicate that the model's must have all permissions.
     *
     * @return static
     */
    public function admin()
    {
        return $this->state(fn (array $attributes) => [
            'permissions' => Dashboard::getAllowAllPermission(),
        ]);
    }
}

Our Friends