0

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
4

1 に答える 1

1

作成した質問の id = 1 を確認しましたか?
データベースで id 列が自動インクリメントされていますか?
MySQL データベースを使用していますか?

行の後にすべての質問を表示したい場合がありpost :createます。
次に、Apple の質問を選択して、対応する ID を取得します。

それが役立つことを願っています。

于 2012-06-15T17:40:20.747 に答える