RSpec和FactoryGirl对表演动作的解释

RSpec和FactoryGirl对表演动作的解释,rspec,factory-bot,Rspec,Factory Bot,刚开始与RSpec和Factory Girl一起学习测试,并且遇到了这个测试 describe "#show" do it "render the show template" do get :show, id: FactoryGirl.create(:opinion) expect(response).to render_template :show end end 要呈现show页面,我知道它需要ID。

刚开始与RSpec和Factory Girl一起学习测试,并且遇到了这个测试

describe "#show" do
        it "render the show template" do
            get :show, id: FactoryGirl.create(:opinion)
            expect(response).to render_template :show
        end
    end
要呈现show页面,我知道它需要ID。我只想了解这一行的含义
ID:FactoryGirl.create(:ointion)

现在我想它的意思是“获取FactoryGirl正在创建的意见对象的ID”,但我想确定一下

此外,我只是想知道是否有其他方法可以使用其他语法编写相同的测试

get :show, id: FactoryGirl.create(:opinion)
在这里,您正在发出一个
GET
请求,并将
:id
参数与之一起传递,以告诉它显示特定
意见的页面

id: FactoryGirl.create(:opinion)
这是一个
参数
,它是发出
/show
请求所必需的,因此您在发出请求时传递它。否则测试就会失败。在这里,您正在传递
意见
对象,Rails将为您检索
id
。或者,您可以发送
id
本身,而不是
意见
对象。因此,这也会起作用:

get :show, id: FactoryGirl.create(:opinion).id
某种程度上,更干净的方法是:

首先定义
意见
对象:

let(:test_opinion) { FactoryGirl.create(:opinion) }
然后,您将在稍后的测试中使用
test\u 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.如果需要,您可以发送更多逗号分隔的
参数

get :show, format: :json, id: FactoryGirl.create(:opinion)