【问题标题】:Argument 1 passed to Illuminate\Foundation\Testing\TestCase::actingAs()参数 1 传递给 Illuminate\Foundation\Testing\TestCase::actingAs()
【发布时间】:2018-10-16 14:47:08
【问题描述】:

我想尝试做测试,登录的会员可以创建工作,这是我的测试代码。

/** @test */
public function member_can_create_a_job(){
    $member = factory('App\Models\M_member')->create();
    $this->actingAs($member);

    $job = factory('App\Models\M_lowker')->make();
    $this->post('/lowker/tambah-lowker', $job->toArray())->assertRedirect('/lowker/tambah-lowker');
}

这是我的 App\Models\M_member

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

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('App\Models\M_lowker');
    }

    public function comments()
    {
        return $this->hasMany('App\Models\M_komentar');
    }
}

当我运行时,我在 cmd 中遇到错误,例如 this.

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

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

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

【问题讨论】:

  • 显示App\Models\M_member 模型
  • 那是我的 M_member 模型

标签: php laravel


【解决方案1】:

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

$user = factory('App\User')->create()->first();

【讨论】:

    【解决方案2】:

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

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Contracts\Auth\Authenticatable;
    use Illuminate\Auth\Authenticatable as AuthenticableTrait;
    
    class M_member extends Model implements Authenticatable{
        use AuthenticableTrait;
    

    【讨论】:

      【解决方案3】:

      这个错误告诉你你正在使用的模型没有扩展 Illuminate\Contracts\Auth\Authenticatable 合约,这是使用actingAs方法所必需的。如果您有 laravel 的身份验证,您可以检查用户模型作为示例。类似于:

      <?php
      
      namespace App;
      
      use Illuminate\Notifications\Notifiable;
      use Illuminate\Foundation\Auth\User as Authenticatable;
      
      class User extends Authenticatable
      { 
      

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

      或者你可以像这样在你的模型上实现 Authenticatable 合约

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

      【讨论】:

      • 现在我的模型扩展了模型。我可以把它放在哪里?
      • 我更新了答案,执行合同也应该有效。只需确保在您的课程之前添加合同的课程
      • 错误发生了这样的变化。有 1 次失败:1) Tests\Feature\JPSTest::member_can_create_a_job 断言两个字符串相等失败。 --- 预期 +++ 实际 @@ @@ -'localhost/lowker/tambah-lowker' +'localhost' I:\W 42 N\Home Work\Semester 5\Rekayasa Perangkat Lunak\Praktikum\jps\vendor\laravel\framework \src\Illuminate\Foundation\Testing\TestResponse.php:97 I:\W 42 N\Home Work\Semester 5\Rekayasa Perangkat Lunak\Praktikum\jps\tests\Feature\JPSTest.php:38 失败!测试:3,断言:5,失败:1。
      • 显然你的测试如果失败是因为没有重定向到预期的 url。如您所见,您已将 assertRedirect 放置到“/lowker/tambah-lowker”,而是将您重定向到本地主机,即您的主页。在您进行 post 调用的方法中,它应该返回到哪个页面?
      • 在我进行 post 调用的方法中,我使用 return back(),这意味着重定向到 '/lowker/tambah-lowker'
      猜你喜欢
      • 2021-10-19
      • 2020-07-05
      • 1970-01-01
      • 2013-08-12
      • 2017-08-24
      • 2020-05-27
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多