如今,高质量软件的开发与自动化测试密不可分。因此,该包包含测试工具,以帮助您轻松进行测试。

要使用这些工具,只需将 ScreenTesting trait 添加到您的测试类中,例如:

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,
    ]);

注意:如果您的操作依赖于 GET 参数,例如操作 /admin/orders/approve?order=1,那么这个值也必须使用 parameters 方法设置。

很可能,您的路由对访客是关闭的,仅对用户开放。您需要调用 actingAs 方法传递用户以登录。

// 创建一个 App\Models\User 实例...
$user = User::factory()->create();

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

当提示时,您可能会遇到 403|401 错误——这意味着用户没有足够的权限。 一种选择是通过 Dashboard facade 获取所有可用权限。

use Orchid\Support\Facades\Dashboard;

$user = User::factory()->create([
  'permissions' => Dashboard::getAllowAllPermission(),
]);

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

更优雅的解决方案是在工厂中定义一个方法:

class UserFactory extends Factory 
{
    // ...

    /**
     * 指定模型必须拥有所有权限。
     *
     * @return static
     */
    public function admin()
    {
        return $this->state(fn (array $attributes) => [
            'permissions' => Dashboard::getAllowAllPermission(),
        ]);
    }
}

我们的朋友