刚开始使用RSpec和Factory Girl学习测试,并且遇到了这个测试
400 Bad Request
要呈现展示页面,我了解它需要ID。我只想了解这一行的含义describe "#show" do
it "render the show template" do
get :show, id: FactoryGirl.create(:opinion)
expect(response).to render_template :show
end
end
。
现在我认为这意味着“获取FactoryGirl正在创建的Opinion对象的ID”,但我想确定。
此外,我只是想知道是否有其他方法使用其他语法编写相同的测试?
答案 0 :(得分:2)
get :show, id: FactoryGirl.create(:opinion)
在这里,您正在发出GET
请求并传递:id
param以告诉它显示该特定opinion
的页面。
id: FactoryGirl.create(:opinion)
这是一个param
,它是发出/show
请求所必需的,因此您在发出请求时会传递它。否则测试将失败。在这里,您传递opinion
对象,Rails将为您检索id
。或者,您可以发送id
本身而不是opinion
对象。所以,这也会奏效:
get :show, id: FactoryGirl.create(:opinion).id
做得更干净的方式:
首先定义opinion
对象:
let(:test_opinion) { FactoryGirl.create(:opinion) }
然后,您将在测试中稍后使用test_opinion
对象或其id
:
describe 'GET #show' do
context "existing opinion" do
it 'responds with success' do
get :show, id: test_opinion.id
expect(response.status).to eq(200)
expect(response).to render_template :show
end
end
end
您还可以传递请求所需的更多params
以正确呈现模板。
e.g。如果需要,您可以发送更多以逗号分隔的params
:
get :show, format: :json, id: FactoryGirl.create(:opinion)