Laravel Pest 和 Blade 指令

问题描述 投票:0回答:1

我正在构建一个管理面板,其中的按钮仅在用户类型为“读者”时才可见。为此,我创建了一个自定义刀片,如果,它看起来像这样

 Blade::if('reader', function () {
  return auth()->check() && auth()->user()->user_type === 'reader';
 });

这在行动中效果很好,但我想为其编写一个测试,为此我使用

Pest
,我的测试看起来像这样

 Livewire::actingAs($user) // user has a type of reader!
  ->test(UtilityMeterList::class)
  ->assertSee('createButton')

我如何渲染按钮:

 @reader
  <a type="button" class="createButton hidden md:block text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800" href={{ route('utility-meter.create') }}>
                {{__('common.create_a_new_one')}}
  </a>
 @endreader

如果我删除自定义 if,则测试成功,但如果不删除,则测试失败。尝试将自定义刀片更改为门,或者简单的如果,没有任何效果。从错误消息来看,Pest 似乎没有处理 if 语句。有什么想法或建议如何为此功能编写测试吗?任何帮助将不胜感激。

php laravel unit-testing laravel-blade php-pest
1个回答
0
投票

在测试设置中注册您的自定义 Blade 指令,以确保它在测试过程中被识别,从而允许您的测试在使用 @reader 指令时通过。

use Illuminate\Support\Facades\Blade;


Blade::if('reader', function () {
    return auth()->check() && auth()->user()->user_type === 'reader';
});

Livewire::actingAs($user) 
    ->test(UtilityMeterList::class)
    ->assertSee('createButton');
© www.soinside.com 2019 - 2024. All rights reserved.