rspec でふつうにテストを書く方法しりたい
先日の railsdevcon 以後、ちゃんとテスト書くようにしはじめたものの、何をお手本にしたらいいものかわからず、手探りでテスト書いてるので、ふつうのテストの書きかたを知りたい。
だんだんテストコードじゃないのが増えてくる
テストのヘルパー的メソッドが増えてきたら、/spec/support に別のモジュールでわけるようにしてるけど、こういう使いかたでいいのかなー?
module HogeModelTestHelper FIXTURES = [:hoges] def self.included(closure) closure.extend Helper closure.send :include, Helper closure.send(:fixtures, *FIXTURES) if closure.respond_to?(:fixtures) end module Helper # なんかいろいろ書く end end
spec のほうで呼んでつかう。
describe Hoge do include HogeModelTestHelper context 'ほげふがなとき' do subject { create_hoge } it { should be_valid } # とかなんとか end end
実際にテストしてるのじゃないコードは、わけちゃってる。
携帯からのアクセスとかをテストする方法がわからない
スタブをつかうべきなのかもしれないと思いつつも、jpmobile がいろいろいいかんじにいろいろやってるので、スタブだとちょっと大変かも、と思ってるところ。仕方ないので、インチキしてる。
class ActionController::TestRequest def set_env(key, value) @env[key] = value end end
とか書いて /spec/support においておいて、コントローラのテストでインチキをする。携帯の UID をつかった機能のテストとかで使う。
@request.set_env('HTTP_X_DCMGUID', uid)
あと、UA を偽装した風のリクエストをなげたりするときは、以下のようなインチキをしたりしてる。
module MobileAccessTestHelper private [:get, :put, :post, :delete].each do |http_method| define_method("#{http_method}_by_mobile") do |*args| set_mobile_ua send http_method, *args end end def set_mobile_ua(ua = "DoCoMo/2.0 SH902i(c100;TB;W24H12)") @request.user_agent = ua end end
ナイステスト情報しりたい。