测试
建议编辑如今,高质量软件的开发与自动化测试密不可分。因此,该包包含测试工具,以帮助您轻松进行测试。
要使用这些工具,只需将 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(),
]);
}
}