joshhanley/livewire-dusk-testbench

为Livewire包开发提供Laravel Dusk测试辅助工具。

v3.0.0-beta.7 2024-07-16 03:28 UTC

README

Livewire Dusk Testbench是一个便利的包装器,它围绕Orchestral Testbench Dusk,使您更容易使用Laravel Dusk测试您的包中的Livewire组件。

此代码由Caleb Porzio为测试Livewire本身而开发,并由Josh Hanley打包供他人使用。

入门

建议在阅读此文档之前先阅读这些包的文档

安装

要使用composer安装,请在终端中运行以下命令

composer require --dev joshhanley/livewire-dusk-testbench

从该包的V2版本升级

  • phpunit.xml中的App key不再需要。
  • public array $packageProviders = [];的签名现在具有数组类型定义。
  • configureViewDirectory()方法已重命名为viewsDirectory,现在应返回视图目录的路径字符串。还需要返回一个字符串类型的返回值。
  • $testsNamespace属性和configureTestsDirectory()方法不再需要,因此可以删除。
  • tweatApplicationHook()方法现在是static方法。
  • 旧README中的“可能的覆盖”列表中的几乎所有项都不再相关,可以删除。剩余的列表在下文中列出。
  • 测试不再需要调用$this->browse()方法,而是您可以调用Livewire::visit(MyComponent::class),Livewire:visit的第一个参数不再是$browser,而是您的组件类。以下是一些示例

旧的测试结构

/** @test */
public function it_can_count()
{
    $this->browse(function (Browser $browser) {
        Livewire::visit($browser, CounterComponent::class)
            // Assertions here
            ;
    });
}

新的测试结构

/** @test */
public function it_can_count()
{
    Livewire::visit(CounterComponent::class)
        // Assertions here
        ;
}

用法

要使用此包,您需要

  • 设置您的浏览器基础测试用例
  • 注册您的包服务提供者(如果需要)
  • 设置布局视图(如果需要)
  • 配置测试目录和命名空间(如果需要)

然后您就可以开始测试了。

您可以根据需要覆盖其他配置选项。

设置浏览器测试用例

要使用Livewire Dusk Testbench,您只需在您的dusk测试中扩展LivewireDuskTestbench\TestCase而不是扩展Orchestra\Testbench\Dusk\TestCase

或者在您的基浏览器测试用例中配置此选项

<?php

class BrowserTestCase extends LivewireDuskTestbench\TestCase
{
    //
}

注册包服务提供者

在$packageProviders属性中注册您的包服务提供者以确保它们在测试中加载

public array $packageProviders = [
    YourPackageServiceProvider::class,
];

设置布局视图

要添加其他包到您的应用程序布局进行测试,例如AlpineJS,您需要创建一个自定义布局。

通过在包中的某个位置创建一个views/components/layouts文件夹,并在其中添加一个位于布局文件夹内的app.blade.php文件来创建您自己的应用程序布局。

根据需要填充您的应用程序布局。

然后通过覆盖viewsDirectory方法返回您创建的views文件夹的路径来设置您的基视图文件夹。

例如

存储您的视图文件夹和应用程序布局的好位置是在您的Dusk浏览器测试文件夹中。

在包的根目录中创建以下目录和文件tests/Browser/views/components/layouts/app.blade.php

然后在您的 tests/Browser/TestCase.php 文件中添加

public function viewsDirectory(): string
{
    // Resolves to 'tests/Browser/views'
    return __DIR__.'/views';
}

Livewire Dusk 宏

Livewire 提供了一组 Dusk 宏,您可以使用它们。

请查看 Livewire 源代码中的它们,位置在 'livewire/src/Features/SupportTesting/DuskBrowserMacros.php'

此外,该包还提供以下功能

  • assertSeeInOrder('@container', ['a', 'b', 'c'])
  • assertIsVisibleInContainer('@container', '@item')
  • assertIsNotVisibleInContainer('@container', '@item')
  • assertHasClasses('@selector', ['class1', 'class2', 'class3'])
  • assertHasOnlyClasses('@selector', ['class1', 'class2', 'class3'])
  • assertMissingClasses('@selector', ['class1', 'class2', 'class3'])
  • assertConsoleLogHasErrors()
  • assertConsoleLogMissingErrors()
  • assertConsoleLogHasError($message)
  • assertConsoleLogMissingError($message)

示例包

已经设置了一个示例包,展示了如何使用该包。在此处查看

Livewire 包示例

可能的覆盖

以下是一些您可以在浏览器 TestCase 文件中覆盖的设置,以满足您的测试需求。以下为默认值

public $packageProviders = [];

public function viewsDirectory(): string
{
    return '';
}

public static function tweakApplicationHook()
{
    return function () {};
}

故障排除

这只是 Orchestral Testbench Dusk 的便利包装,以便更容易地在您的包中测试 Livewire 组件。

请参考相关包的文档进行故障排除。