RSpec和FactoryGirl演示动作的解释

时间:2015-08-12 22:57:24

标签: rspec factory-bot

刚开始使用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”,但我想确定。

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

1 个答案:

答案 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)