Phpunit 如何检查Laravel刀片组件是否已加载?

Phpunit 如何检查Laravel刀片组件是否已加载?,phpunit,laravel-blade,laravel-7,Phpunit,Laravel Blade,Laravel 7,我正在为一个能提供一些帮助的方案捐款。因此,此软件包的用户可以将刀片模板上的组件用作: 组件位于我的软件包的src/components文件夹下。使用loadViewComponentsAs()方法将这些组件加载到软件包服务提供程序中,如下所述: $this->loadViewComponentsAs('mypackage'[ 组件\组件A::类, ... ]); 现在,我需要对phpunit进行一些测试,以检查组件是否由包服务提供商加载,类似于下一步: public function t

我正在为一个能提供一些帮助的方案捐款。因此,此软件包的用户可以将刀片模板上的组件用作:


组件位于我的软件包的
src/components
文件夹下。使用
loadViewComponentsAs()
方法将这些组件加载到软件包服务提供程序中,如下所述:

$this->loadViewComponentsAs('mypackage'[
组件\组件A::类,
...
]);
现在,我需要对
phpunit
进行一些测试,以检查组件是否由包服务提供商加载,类似于下一步:

public function testComponentsAreLoaded()
{
$this->assertTrue(/*检查“x-mypackage-component-a”的代码存在*/);
}
是否有任何方法(使用Laravel框架)检查刀片组件名称是否存在和/或是否已加载

我已经成功地对软件包提供的一组刀片视图执行了类似的操作,下一个代码是:

//在包服务提供程序上加载的视图为:
$this->loadViewsFrom($viewsPath,'mypackage');
//phpunit试验方法为:
公共函数testViewsAreLoaded()
{
$this->assertTrue(View::exists('mypackage::View-a');
$this->assertTrue(视图::exists('mypackage::View-b');
...
}

提前谢谢

没有检查组件是否存在的方法或帮助器,但从那时起,刀片组件在laravel中是类,因此您可以检查特定组件类是否存在:

// application namespaces

namespace App\View\Components;

use Illuminate\View\Component;

// define component
class mypackage extends Component { ... }


// check component
public function testViewsAreLoaded(){
    $this->assertTrue(class_exists('\Illuminate\View\Component\mypackage'));
    ...
}

终于找到了解决这个问题的方法,我要解释一下,因为它可能对其他读者有用。首先,需要加载所使用的视图集(通常在
render()
方法上使用的视图集)。在我的特殊情况下,组件视图位于
resources/components
文件夹中,因此我必须在包的服务提供商的
boot()
方法中插入下一个代码:

//加载组件使用的刀片视图。
$viewsPath=$this->packagePath('resources/components');
$this->loadViewsFrom($viewsPath,'mypackage');
其中,
packagePath()
是一个将完全限定路径(从包根文件夹)返回到接收参数的方法

接下来,再次在
boot()
方法中,我必须按照问题的说明加载组件:

$this->loadViewComponentsAs('mypackage'[
组件\组件A::类,
组件\组件B::类,
...
]);
最后,为了进行一个测试,以确认服务提供商正确加载了视图和组件,我创建了下一个与
phpunit
一起使用的方法:

public function testComponentsAreLoaded()
{
//检查刀片组件视图是否已加载。
$this->assertTrue(视图::exists('mypackage::component-a');
$this->assertTrue(视图::exists('mypackage::component-b');
...
//现在,检查类组件别名是否已注册。
$Alias=Blade::GetClassComponentAlias();
$this->assertTrue(isset($alias['mypackage-component-a']);
$this->assertTrue(isset($alias['mypackage-component-b']);
...
}
作为补充信息,我必须说我的
phpunit
测试类继承自
TestCase
类,您可能需要在测试文件中包含
视图
刀片
外观。在运行测试之前,我还使用下一个方法来确保包的服务提供程序的
boot()
方法在我的测试环境中执行:

受保护的函数getPackageProviders($app)
{
返回['Namespace\To\MyPackageServiceProvider'];
}

您好,谢谢您的回答,但我还不知道如何用这种方式解决这个问题。我还使用
Blade::getClassComponentAlias()
方法找到了一个解决方案,并添加了一个答案和解释。