Rails测试自动生成密码

时间:2016-08-13 02:44:33

标签: ruby-on-rails testing password-encryption

我的应用程序允许教师为学生启动帐户。为了避免要求教师为学生考虑密码的负担,我编写了一种自动生成密码的方法。该功能在开发和生产中正常运行。我正在尝试编写测试以确保此功能继续有效,但结果并非我所期望的。

我的预感是我的错误在于测试:

students_controller_test.rb

test "Auto Password" do
    post students_path, params: { student: { first_name:  "Ren",
                                         last_name: "Stimpy",
                                        studentNum: 13},
                                 aula: { seminar_id: @seminar.id } }
    student = assigns(:student)
    assert_equal "rs13", student.username
    assert_equal Student.digest('rs13'), student.password_digest
end

结果:

 FAIL["test_Auto_Password", StudentsControllerTest, 2.0619301088154316]
 test_Auto_Password#StudentsControllerTest (2.06s)
        --- expected
        +++ actual
        @@ -1,2 +1 @@
        -# encoding: ASCII-8BIT
        -"$2a$04$1FfqltU9B7yawIs7Z4GWLe9eaaVhFxdPvF9Vg2UWUbYxwqQ5j/9Dm"
        +"$2a$04$CuN1BLKhI/Fx9ueB4QAskOl9Ik.og26TJeeDDF5tdur1erILzjj7W"
        test/controllers/students_controller_test.rb:91:in `block in <class:StudentsControllerTest>'

我可能误解了密码消化的工作方式。学生的密码应为“rs13”。所以我期望Student.digest('rs13')应该等于student.password_digest。显然,他们不是。

顺便说一下,密码“rs13”来自我的students_controller中的一个方法,该方法通过连接学生的姓名缩写和学号来自动创建用户名。密码也等于此。

提前感谢您的任何见解!

1 个答案:

答案 0 :(得分:0)

后来我意识到“认证”方法是实现我的目标的最佳方式。只需用以下代码替换测试的最后一行:

assert student.authenticate("rs13")