如果在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 测试中间件?

Laravel 5.5 密码重置令牌表单未出现

php Laravel 5.5隐藏了来自whoops页面的env

在 Laravel 5.5 中测试授权策略时遇到问题

Laravel 5.5:使用 DatabaseMigrations 进行测试会删除所有表