コントローラーでカスタム検索メソッドの動作をテストしようとしています:
#RecordingsController
def search
# raise params.inspect
@search = params[:search]
searches = []
searches2 = []
for n in 1..5
searches << @search["date(#{n}i)"].to_i
searches2 << @search["date2(#{n}i)"].to_i
end
start_date = date_format(*searches)
end_date = date_format(*searches2)
conditions = []
conditions << "agent like '%#{@search["agent"]}%'" unless @search["agent"].blank?
conditions << "phone like '%#{@search["phone"]}%'" unless @search["phone"].blank?
conditions << "date between '#{start_date}' and '#{end_date}'"
@recordings = Recording.where(conditions.join(" AND ")).order('date ASC')
if @recordings.blank?
redirect_to("/", alert: "No results were found for this search. Please try again.")
else
render "recordings/search"
end
end
次のレイアウトを使用します。
#recordings_controller_spec.rb
describe RecordingsController do
describe "POST #search" do
context "with valid attributes" do
it "assigns a new search to @search" do
search = @recording_search
get :search, @recording_search
assigns(:search).should eq(search)
end
it "populates an array of recordings"
it "renders the :search view"
end
end
end
私が得た最も遠いものは、フォームの params ハッシュが何であるかを模倣するハッシュを構築しようとしています
#params hash
params = {"search" => { "date_1i" => "2012", "date_2i" => "1", ... "date2_5i" => "00" } }
ここで、date_#{n}i は開始日 [年、月、日、時、分]、date2_#{n}i は終了日です。ここに投稿された回答に従って、params ハッシュを通常のハッシュだけで模倣しようとしています。コントローラーからわかるように、実際にはパラメーターを #search メソッドに渡しません。私はすべきですか?または、rspec テストで params ハッシュをモックし、my @search
、@recordings
、およびredirect_to
/render
変数/アクションが実行されているかどうかを判断する方法はありますか? リクエスト仕様でレンダリング/リダイレクトをすでにテストしていますが、可能であればこのメソッドを完全にテストしたいと思います。