程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Laravel 5.1 测试 - 从数据库中获取行以完成测试

发布于2021-11-13 14:08     阅读(554)     评论(0)     点赞(17)     收藏(5)


我正在 Laravel 5.1 中构建一个测试例程来运行我刚刚创建的登录过程。作为测试的一部分,我想测试密码重置和更改过程。

问题是密码重置过程生成并在带有时间戳和 uuid 的表中行。该链接的有效期为 1 小时,以便重置生效。

流程是:

1- 通过输入电子邮件地址重置密码

2- 系统生成带有 uuid 链接的电子邮件并发送给用户(目前它出现在 Laravel 日志中)。

3- 用户点击电子邮件中的链接,如果在生成后一小时内,用户会看到一个密码更改屏幕。该链接也将从表中删除。

所以现在我的测试代码:

public function testSendPasswordLink()
{
    $this->visit('/login')
        ->click('Forgot Your Password?')
        ->seePageIs('/forgot-password')
        ->type('test@test.com','email')
        ->press('Send Password Reset Link')
        ->seePageIs('/login')
        ->see('A password reset link was sent to the email address supplied.')
        ->seeInDatabase('password_resets', ['email' => 'test@test.com']);
}

我想要:

       ->getFromDatabase('password_resets', 'uuid')
       ->visit('/reset-password/'.$uuid)
       ->see(....

有没有办法做到以上几点?我知道如何see in the table但不知道如何get from the table在测试中。

或者,有没有办法通过一组不同的步骤来实现这一点?

谢谢!


解决方案


哇,精神错乱……好吧,我是新手,所以我现在还不会处决自己……!答案很明显(睡在上面之后!)

我所要做的就是查询表并检索令牌以执行密码重置测试......下面是完成的代码:

  1. 将 Eloquent 添加到测试 php 文件中

    使用 Illuminate\Database\Eloquent\Model;

  2. 下面是完整的功能:

    公共函数 testChangePassword()

    $this->visit('/login')
        ->click('Forgot Your Password?')
        ->seePageIs('/forgot-password')
        ->type('test@test.com','email')
        ->press('Send Password Reset Link')
        ->seePageIs('/login')
        ->see('A password reset link was sent to the email address supplied.')
        ->seeInDatabase('password_resets', ['email' => 'test@test.com']);
    
    $uuid = DB::table('password_resets')
        ->where('email', '=', 'test@test.com')
        ->value('token');
    
    $this->visit('/reset-password/' . $uuid)
        ->type('bbbbbbbb','password')
        ->type('bbbbbbbb','password_confirmation')
        ->press('Change Password')
        ->see('Your password was reset.')
        ->seePageIs('/login')
        ->type('test@test.com','email')
        ->type('bbbbbbbb','password')
        ->press('Sign In')
        ->seePageIs('/welcome')
        ->click('Logout')
        ->seePageIs('/login');
    
    // Change password back
    $this->visit('/login')
        ->click('Forgot Your Password?')
        ->seePageIs('/forgot-password')
        ->type('test@test.com','email')
        ->press('Send Password Reset Link')
        ->seePageIs('/login')
        ->see('A password reset link was sent to the email address supplied.')
        ->seeInDatabase('password_resets', ['email' => 'test@test.com']);
    
    $uuid = DB::table('password_resets')
        ->where('email', '=', 'test@test.com')
        ->value('token');
    
    $this->visit('/reset-password/' . $uuid)
        ->type('abcd1234','password')
        ->type('abcd1234','password_confirmation')
        ->press('Change Password')
        ->see('Your password was reset.')
        ->seePageIs('/login')
        ->type('test@test.com','email')
        ->type('abcd1234','password')
        ->press('Sign In')
        ->seePageIs('/welcome')
        ->click('Logout')
        ->seePageIs('/login');
    

顺便说一句,我似乎无法用 {} 括号格式化代码,所以很抱歉。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.phpheidong.com/blog/article/198312/b3bd81d18d27645256e4/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)