参数 1 传递给 Illuminate\Foundation\Testing\TestCase::actingAs



我想尝试进行测试,登录的成员可以创建作业,这是我的测试代码。

/** @test */
public function member_can_create_a_job(){
$member = factory('AppModelsM_member')->create();
$this->actingAs($member);
$job = factory('AppModelsM_lowker')->make();
$this->post('/lowker/tambah-lowker', $job->toArray())->assertRedirect('/lowker/tambah-lowker');
}

这是我的应用\模型\M_member

<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class M_member extends Model{
protected $table = "member";
public $timestamps = false;
protected $fillable = ["nama", "email", "password", "alamat", "tgl_lahir", "remember_token"];
public function jobs()
{
return $this->hasMany('AppModelsM_lowker');
}
public function comments()
{
return $this->hasMany('AppModelsM_komentar');
}
}

当我运行时,我在cmd中出现错误,例如 这。

1) Tests\Feature\JPSTest::member_can_create_a_job TypeError:传递给 Illuminate\Foundation\Testing\TestCase::actingAs() 的参数 1 必须是 Illuminate\Contracts\Auth\Authenticatable M_member 的实例,给定 App\Models\ 的实例,在 I:\W 42 N\Home Work\Semester 5\Rekayasa Perangkat Lunak\Praktikum\jps\tests\Feature\JPSTest.php 在第 35 行调用

I:\W 42 N\家庭工作\学期 5\Rekayasa Perangkat Lunak\Praktikum\jps\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concern\InteractsWithAuthentication.php:16 I:\W 42 N\Home Work\Semester 5\Rekayasa Perangkat Lunak\Praktikum\jps\tests\Feature\JPSTest.php:35

错误!测试: 3, 断言: 3, 错误: 1.

此错误告诉您正在使用的模型没有扩展 Illuminate\Contracts\Auth\Authenticatable 合约,这是使用 actingAs 方法所必需的。如果您有 laravel's auth,您可以检查用户模型作为示例。这就像:

<?php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{ 

因此,请尝试扩展模型以具有此功能。

或者你可以像这样在模型上实现可验证协定

class User extends Model implements
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
}

创建用户时可以添加first()

$user = factory('AppUser')->create()->first();

这个问题通过像这样修改我的M_member模型来解决。

<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
use IlluminateContractsAuthAuthenticatable;
use IlluminateAuthAuthenticatable as AuthenticableTrait;
class M_member extends Model implements Authenticatable{
use AuthenticableTrait;

最新更新