rspec утверждает зашифрованный пароль, а не простой текст - PullRequest
2 голосов
/ 01 сентября 2010

Как мне написать тест в rspec, чтобы пароли не сохранялись в виде простого текста в моем приложении Ruby on Rails?

Меня пока не волнует реализация, так как я точно не знаю, какой плагин или как я собираюсь написать шифрование пароля (есть много примеров).

Я просто хочу провальный тест, независимый от реализации. Затем, когда я реализую свой код, я могу быть уверен, что у меня нет паролей в виде простого текста.

Я думаю, что мне нужно сохранить пользователя (с паролем), а затем снова загрузить его и проверить, что пароль не совпадает с версией обычного текста.

Я даже на правильном пути?

У меня есть эти пустые тесты:

<br> describe "password encryption" do<br> it "should have an encrypted password attribute"<br> it "should set the encrypted password"<br> it "should encrypt the password"<br> end

1 Ответ

4 голосов
/ 01 сентября 2010

Как вы сказали, поведение, которое вы описываете, заключается в том, что пароль невозможно восстановить в его простой форме, поэтому попробуйте написать спецификацию, описывающую это, а не шифрование, которое является более подробным описанием реализации.

specify "a user's password should not be readable when they are loaded from the database" do
  my_password = 'foobar22'
  u = User.create :password => my_password, :password_confirmation => my_password
  u.reload
  u.password.should_not == my_password
end

, который может быть лучше структурирован и сформулирован лучше, но даст неверную спецификацию, если вы просто сохраните и прочитаете пароли в виде открытого текста для аутентификации.

Не думаю, что вы получите много пользыопределение того, как работает шифрование, если вы сами его не реализуете (что обычно нежелательно).

Если вы решите использовать готовую систему (например, devise, просвет, ...), вы можете найти более полезным написать интеграционные тесты, чтобы проверить правильность работы системы в вашем проекте,вместо того, чтобы тестировать специфику системы аутентификации (что авторы уже должны были сделать, в противном случае найдите другую систему аутентификации!).

...