Ruby言語やLinuxのネタが多いです。
April 15, 2006
■ [Ruby] Ruby-GetText-Package-1.4.0
リリースしました。
- OpenBSDでも使用できるようになりました。
- RubyOnRailsサポートの強化
- ActionWebServiceのサポート
- ActionMailerでマルチパートのメールサポート
- RubyOnRails-1.1.2のサポート
$ cat gct.rb
Thread.new do
loop do
sleep 0.01
GC.start
p "GCed"
end
end
んで、実行
$ ruby -rgct target.rb
これを使うと現在のRuby-GNOME2 CVS版は結構良い感じでSEGVします、って、今のCVS(Ruby-GNOME2)は相当熱いのでRuby-GNOME2を使う場合は正式リリース版の0.14.1を使ってくださいませ。
April 15, 2007
■ [Rails] FunctionalTestとIntegrationTestでローカライズの確認テスト
そろそろまじめにRuby-GetText-Packageのテストケースの1つとしてテスト用Railsアプリを作ってそれのテストを書いていこうと思いたち、Railsのテストケースを勉強し始めてみた(っておぃ(^^;))。
で、お恥ずかしながら多少混乱したので整理しておこうと思う。ローカライズされた文字列もきちんとテストしたかったんだよなぁ、と言う人(プロジェクト)には参考になるかも。
■ 最初にRuby-GetText-Packageがどのようにローカライズする言語を特定するかのおさらい。Ruby-GetText-PackageのCGIバージョンではHTTP_ACCEPT_LANGUAGE、クッキーに保持された"lang"という値、QUERY_STRINGの"lang"というパラメータの値、GetText.locale=で指定した言語、のそれぞれを参照してローカライズする言語を決める(後者の方が優先)。つまり、ローカライズ用のテストではそれらのどれかを明示的に指定してあげる必要がある。
■ FunctionalTestでは、前述したロケールの値はいずれにせよparams["lang"]にいったん格納されるのでそれを応用する。テストのメソッドだけ抜き出すとこんな感じ。
test/functional/xxxxs_controller_test.rbのテスト例:
def test_list
get :list, :lang => "ja"
puts @response.body #実際はテストを書く。
end
■ IntegrationTestでは、第3引数にHTTPヘッダを利用できるので、よりリアル(?)なテストができる。まぁ、正直、アプリのテストでこの差は意味ないとは思うけど(^^;)。
test/integration/xxx_test.rbのテスト例:
def test_list
get "/articles/list", nil, :accept_language => "ja"
puts @response.body
end
もちろん、第2引数を使うのであれば、FunctionalTestと同様に:langを使ったテストが可能。
test/integration/xxx_test.rbのテスト例:
def test_list
get "/articles/list", :lang => "ja"
puts @response.body
end
■ ちなみに、Functionalか、Integrationのどちらでローカライズのテストをするのか?ってちょっと迷うね。両方ってこともないだろうから、どちらかでやれば良いと思うんだけど・・・。部品のテストでないのであればFunctionalではなくIntegrationで実施するのが良いのではないかと思うんだけど、実際はどうなのかな。
■ っとまぁ、そんなこんなで書き方もわかったことだし、テストを書き始めるとするか・・・、ってこんな時間かよ、明日にしよう。
#そしてテストはいつになっても書き始まらないのだった。つづく。
■ あ、そうそう。どのテストでもGetText.locale = "ja"とかしてしまえば強制的に日本語化できちゃうんだけど、それはCGIのルールを全く無視してしまう方法なのでできれば上で述べた方法をお薦めします。
