# 单元测试 Livewire提供了一组功能强大的工具来测试您的组件。 这是一个 Livewire 组件以及相应的测试,以演示基础知识。 ``` use Livewire\Component; class CreatePost extends Component { public $title; public function mount($initialTitle = '') { $this->title = $initialTitle; } public function create() { auth()->user()->posts()->create($this->validate([ 'title' => 'required', ]); return redirect()->to('/posts'); } public function render() { return view('livewire.create-post'); } } ``` ```
``` ``` class CreatePostTest extends TestCase { /** @test */ function can_create_post() { $this->actingAs(factory(User::class)->create()) Livewire::test(CreatePost::class) ->set('title', 'foo') ->call('create'); $this->assertTrue(Post::whereTitle('foo')->exists()); } /** @test */ function can_set_initial_title() { $this->actingAs(factory(User::class)->create()) Livewire::test(CreatePost::class, ['initialTitle' => 'foo']) ->assertSet('title', 'foo'); } /** @test */ function title_is_required() { $this->actingAs(factory(User::class)->create()) Livewire::test(CreatePost::class) ->set('title', '') ->call('create') ->assertHasErrors(['title' => 'required']); } /** @test */ function is_redirected_to_posts_page_after_creation() { $this->actingAs(factory(User::class)->create()) Livewire::test(CreatePost::class) ->set('title', 'foo') ->call('create') ->assertRedirect('/posts'); } } ``` ## 测试组件状态 Livewire 注册了一个方便的 PHPUnit 方法来测试组件在页面上是否存在。 ``` class CreatePostTest extends TestCase { /** @test */ function post_creation_page_contains_livewire_component() { $this->get('/posts/create')->assertSeeLivewire('create-post'); } } ``` ## 所有可以使用的测试方法 ``` Livewire::actingAs($user); // 将提供的用户设置为会话的测试登录用户 Livewire::test('foo', ['bar' => $bar]); // 使用“ bar”作为参数测试“ foo”组件。 ->set('foo', 'bar'); // 将“ foo”属性(public $ foo)设置为值:“ bar” ->call('foo'); // 调用 "foo" 方法 ->call('foo', 'bar', 'baz'); // 调用 "foo" 方法, 传递 "bar" 和 "baz" 参数 ->emit('foo'); // 触发“ foo”事件 ->emit('foo', 'bar', 'baz'); // 触发“ foo”事件, 传递 "bar" 和 "baz" 参数 ->assertSet('foo', 'bar'); // 断言“ foo” 属性设置为值“ bar” ->assertNotSet('foo', 'bar'); // 断言“ foo”属性未设置为值“ bar” ->assertSee('foo'); // 断言字符串“ foo” 存在于组件的当前呈现内容中 ->assertDontSee('foo'); // 断言字符串“ foo”在组件的当前呈现内容中不存在 ->assertSeeHtml('