ボクココ

個人開発に関するテックブログ

Rails autotset と restful_authentication

autotest

テスト書いても一々それを実行しないといけないのは面倒で、それが原因で一時期テストを書くのを止めていた。でもRailsならAutotestというgemがあり、これを導入した瞬間一気にテストを書く気が沸いてきたので紹介。入れ方とかはググって調べながらやった気がするので省略。
手順
1、1個ウィンドウを作る
2、RAILSROOTでこれ実行 → $ autotest -rails


これだけ。するとRailsコードを修正した瞬間にそれをautotestが感知してテストを自動でテストしてくれる。素晴らしい!てことでRailsアプリ作るならこのGemは100%インストールしておくと良いかと。

RestfulAuthentication

今日は Railsおなじみの認証プラグインであるRestfulAuthenticationを使った場合のフィクスチャの書き方を紹介したいと思う。
RestfulAuthenticationでは入れた瞬間にテストコードも付随して入ってきているから、最低限のテストならできる。 しかし、パスワードがハッシュ化されているため他のパスワードにしたい場合ができない。またユーザを100人作りたい場合にコピペはきつい。
そんな問題を解決するフィクスチャの書き方↓

<%
require 'digest/sha1'
salt = Digest::SHA1.hexdigest(0.to_s)

def secure_digest(*args)
Digest::SHA1.hexdigest(args.flatten.join('--'))
end

def password_digest(password, salt)
digest = REST_AUTH_SITE_KEY
REST_AUTH_DIGEST_STRETCHES.times do
digest = secure_digest(digest, salt, password, REST_AUTH_SITE_KEY)
end
digest
end
%><% for i in 1..100 %>
user<%= i %>:
name: "taro<%= i %>"
email: taro@example.com
salt: <%= salt %>
crypted_password: <%= password_digest("password", salt) %>
created_at: <%= 5.days.ago.to_s :db %>
updated_at: <%= DateTime.now.advance(:days => i*(-1)) %>
<% end %>
updated_at の値は↑のような感じで動的に変えることもできる。



こういうのを知ってくるとテストをする前準備ができるのでスムーズにテストを書くことができるようになると思う