对于laravel测试环境,Laravel gate无法正常工作。在phpunit.xml
我正在使用sqlite
连接和:memory:
作为数据库。
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
在AuthServiceProvider
中,我在下面的代码中定义了门。
public function boot(GateContract $gate)
{
$this->registerPolicies($gate);
foreach($this->getPermissions() as $permission) {
$gate->define($permission->name, function($user) {
$user->hasRole($permission->roles);
});
}
}
protected function getPermissions() {
return Permission::with('roles')->get();
}
所以,我什么时候跑phpunit
。它显示错误no such table: permissions (SQL: select * from "permissions")
。
因此,请指导如何在迁移后为测试环境定义门。
答案 0 :(得分:0)
试试这个:
foreach($this->getPermissions() as $permission) {
$gate->define($permission->name, function($user)use($permisson) {
$user->hasRole($permission->roles);
});
}
如果您不使用use($permission)
,则$ permission将被取消定义...