【问题标题】:policies unit tests doesn't work in laravel nova策略单元测试在 laravel nova 中不起作用
【发布时间】:2020-06-05 10:42:52
【问题描述】:

当我想使用 PHPUnit 测试策略时,它不能按预期工作,它基于 novaServiceProvider 中的门方法工作

protected function gate()
{
    Gate::define('viewNova', function () {
        return true;
    });
}

它只命中这个方法所有策略都被忽略,似乎在使用API​​时这个方法会覆盖所有策略,

但是,当使用 web 时,所有策略都按预期工作,并且似乎根本没有使用此方法

如何使策略在 PHPUnit 测试中按预期工作

public function test_view_any()
{
    create(Branch::class, ['name' => 'admin',]);
    $user = create(User::class, ['branch_id' => 1,]);
    $this->signIn($user);

    $role = create(Role::class, ['name' => 'admin']);
    $user->roles()->attach($role->id);
    
    $this->get('/resources/customers')
         ->assertStatus(200);
}

这是测试

public function viewAny(User $user)
{
    return $user->hasPermission('customers-index-all')
        || $user->hasPermission('customers-index-branch')
        || $user->hasPermission('customers-index-self');
}

这就是政策

如果用户具有在 CustomerPolicy viewAny 方法中定义的所需角色,现在测试必须为绿色,但实际发生的情况是,即使我在 viewAny 方法中返回 true,它也会给出 预期的状态代码 200 但已收到

【问题讨论】:

  • 展示你的单元测试以及你如何称呼它们?
  • 我已经添加了必须命中的测试方法和策略方法以及发生了什么的详细信息。

标签: laravel laravel-nova


【解决方案1】:

我不知道你是否必须测试用户是否通过代理登录。作为 在这种情况下,我使用this package 对策略进行测试。

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多