show アクションをテストしようとしていますが、最初にオブジェクトを DB に保存して表示する必要があります。
test "should get show" do
post :create, question: { question: 'apple'}
get :show, {'id' => "1"}
assert_response :success
assert_not_nil assigns(:question)
end
別のテストでは、post :create...
ラインがあり、動作します。しかし、ここで私は取得ActiveRecord::RecordNotFound: Couldn't find Question with id=1
し続けているので、何が問題なのかわかりません。これを修正するにはどうすればよいですか? 全体像 これを行う最善の方法は何ですか?
編集:
テストを次のように変更しました。
test "should get show" do
post :create, question: {set_id: 4}
pp Question.all
get :show, {'id' => "1"}
assert_response :success
assert_not_nil assigns(:question)
end
それは私に与えます:
[#<Question id: 261990764, question: "Who was... updated_at: "2012-06-15 19:34:16">,
#<Question id: 607888892, question: "Who was... updated_at: "2012-06-15 19:34:16">,
#<Question id: 607888893, question: nil, ... set_id: 4,...]
ID部分を除いて、これはあなたが期待するものです。Rails はテスト環境でランダムな ID を割り当てますか?
これが私の合格テストです:
test "should get show" do
q = Question.new(question: 'q', answer: 'a', set_id: 1)
q.save
get :show, {id: q.id}
assert_response :success
assert_not_nil assigns(:question)
end
それでも、IDが非常に高い理由と、Railsがそれを割り当てる方法を誰かが私に説明してくれることを願っています.
そして、これはフィクスチャを利用する例です:
test "should get show2" do
get :show, {id: questions(:prez_one).id}
assert_response :success
assert_not_nil assigns(:question)
end