2016-08-13 2 views
1

Мое приложение позволяет учителям начинать учетные записи для своих учеников. Чтобы избежать бремени просить учителей думать о паролях для своих учеников, я написал метод автоматического создания паролей. Эта функция работает правильно в разработке и производстве. Я пытаюсь написать тест, чтобы эта функция продолжала работать, но результаты не то, что я ожидаю.Rails test для автоматического генерирования пароля

Подозреваю, что моя ошибка в тесте:

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» исходит из метода в моем student_controller, который автоматически создает имя пользователя, объединяя инициалы и номер студента. Пароль также равен этому.

Заранее благодарю за понимание!

ответ

0

я позже понял, что «подлинность» метод - лучший способ добиться того, что я пытался. Просто замените последнюю строку теста на:

assert student.authenticate("rs13") 
2

Проблема BCrypt::Password will generate the digest with different salt, поэтому соль для создания пароля & проверка различна, поэтому ваш тест не прошел.

Проверить this вне, то вы можете использовать оператор == проверить потенциал учетных данных правильно или нет:

assert_equal 'rs13', student.password_digest 

assert_equal фактически использовать оператор == для compare

+0

Благодарим вас за источник. Определенно, что я искал, но я не мог понять точный синтаксис. "Assert 'rs13' == student.password_dig est" возвращает false. «Assert_equal 'rs13' == student.password_dig est" дает ошибку. «Assert» rs13 '== student.password »действительно работает, но поскольку он проверяет пароль вместо password_digest, я был обеспокоен тем, что это не был верный тест. Я понял, что могу проверить, что я сделал, используя student.authenticate. Это, вероятно, не произошло бы со мной, не задумываясь о вашем ответе. Так что спасибо! - Джефф Зивкович –

Смежные вопросы