• 技术文章 >php框架 >Laravel

    介绍Laravel unit test : 模拟认证的用户

    藏色散人藏色散人2021-04-25 08:53:34转载215

    Laravel unit test : 模拟认证的用户

    在 Laravel 编写单元测试时经常会遇到需要模拟认证用户的时候,比如新建文章、创建订单等,那么在 Laravel unit test 中如何来实现呢?

    官方解决方法

    Laravel 的官方文档中的测试章节中有提到:

    Of course, one common use of the session is for maintaining state for the authenticated user. The actingAs helper method provides a simple way to authenticate a given user as the current user. For example, we may use a model factory to generate and authenticate a user:
    <?php
    
    use App\User;
    
    class ExampleTest extends TestCase
    {
        public function testApplication()
        {
            $user = factory(User::class)->create();
    
            $response = $this->actingAs($user)
                             ->withSession(['foo' => 'bar'])
                             ->get('/');
        }
    }

    其实就是使用 Laravel Testing Illuminate\Foundation\Testing\Concerns\ImpersonatesUsers Trait 中的 actingAsbe 方法。

    设置以后在后续的测试代码中,我们可以通过 auth()->user() 等方法来获取当前认证的用户。

    伪造认证用户

    在官方的示例中有利用 factory 来创建一个真实的用户,但是更多的时候,我们只想用一个伪造的用户来作为认证用户即可,而不是通过 factory 来创建一个真实的用户。

    在 tests 目录下新建一个 User calss:

    use Illuminate\Foundation\Auth\User as Authenticatable;
    
    class User extends Authenticatable
    {
        protected $fillable = [
            'id', 'name', 'email', 'password',
        ];
    }

    必须在 $fillable 中添加 id attribute . 否则会抛出异常: Illuminate\Database\Eloquent\MassAssignmentException: id

    接下来伪造一个用户认证用户:

    $user = new User([
        'id' => 1,
        'name' => 'ibrand'
    ]);
    
     $this->be($user,'api');
    后续会继续写一些单元测试小细节的文章,欢迎关注 : )
    相关推荐:最新的五个Laravel视频教程

    以上就是介绍Laravel unit test : 模拟认证的用户的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:laravel 单元测试
    上一篇:Laravel:服务容器绑定与解析 下一篇:关于 Laravel Hprose RPC 服务
    第16期线上培训班

    相关文章推荐

    • 关于Laravel7便捷的字符串操作• 关于Laravel服务容器绑定与解析• 这23个Laravel面试问题你是应该知道的!• laravel8.0 + vue 安装方法详解• Laravel:服务容器绑定与解析

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网