Laravel 单元测试-模拟认证的用户

Laravel 单元测试-模拟认证的用户,第1张

概述本文章向大家介绍Laravel 单元测试-模拟认证用户,主要包括Laravel 单元测试-模拟认证的用户相关应用实例、知识点总结和注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在 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:

use AppUser;

class ExampleTest extends TestCase

{

public function testApplication()

{

$user = factory(User::class)->create();

$response = $this->actingAs($user)

->withSession(['foo' => 'bar'])

->get('/');

}

}

其实就是使用 Laravel Testing IlluminateFoundationTestingConcernsImpersonatesUsers Trait 中的 actingAs 和 be 方法。

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

伪造认证用户

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

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

use IlluminateFoundationAuthUser as Authenticatable;

class User extends Authenticatable

{

protected $fillable = [

'ID','name','email','password',

];

}

必须在 $fillable 中添加 ID attribute . 否则会抛出异常: IlluminateDatabaseEloquentMassAssignmentException: ID

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

$user = new User([

'ID' => 1,

'name' => 'ibrand'

]);

$this->be($user,'API');

后续会继续写一些单元测试小细节的文章,欢迎关注 : )

讨论交流

总结

以上是内存溢出为你收集整理的Laravel 单元测试-模拟认证的用户全部内容,希望文章能够帮你解决Laravel 单元测试-模拟认证的用户所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1268850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存