我正在尝试测试我的显示操作,但我首先必须将一个对象保存到数据库中才能显示。
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