如果在Laravel 5.5单元测试中隐藏密码,如何模拟用户创建
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果在Laravel 5.5单元测试中隐藏密码,如何模拟用户创建相关的知识,希望对你有一定的参考价值。
我有一个单元验收测试,我在嘲笑用户的创建。
class UserAcceptanceApiTest extends TestCase
{
use WithoutMiddleware;
public function setUp()
{
parent::setUp();
$this->User = factory(AppModelsUser::class)->make([
'id' => '999',
'name' => 'Name',
'email' => 'test@example.com',
'password' => bcrypt('password'),
]);
$this->User = factory(AppModelsUser::class)->make([
'id' => '999',
'name' => 'Name',
'email' => 'test@example.com',
'password' => bcrypt('password'),
]);
$user = factory(AppModelsUser::class)->make();
$this->actor = $this->actingAs($user);
}
public function testStore()
{
$response = $this->actor->call('POST', 'api/users', $this->User->toArray());
$this->assertEquals(200, $response->getStatusCode());
$this->seeJson(['id' => 999]);
}
}
我得到以下例外"Field 'password' doesn't have a default value
。
这是因为在我的User
模型中,我有以下内容:
protected $hidden = ['password', 'remember_token'];
因此它会自动从JSON中删除密码字段。
有没有办法可以覆盖这个测试?因为我想将密码保存为隐藏属性。
答案
public function testStore()
{
$this->User->makeVisible(['password']);
$response = $this->actor->call('POST', 'api/users', $this->User->toArray());
$this->assertEquals(200, $response->getStatusCode());
$this->seeJson(['id' => 999]);
}
以上是关于如果在Laravel 5.5单元测试中隐藏密码,如何模拟用户创建的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.5 中 PHP 单元测试中的类验证器错误
如何在 laravel 5.5 中使用 phpunit 测试中间件?