【问题标题】:Rspec3: Send an Exception to the controllerRspec3:向控制器发送异常
【发布时间】:2014-07-10 12:48:44
【问题描述】:

我想测试我的控制器并确保它在收到ActiveRecord::RecordNotFound 时呈现正确的模板

控制器:

class QuestionnaireController < ApplicationController

  rescue_from ActiveRecord::RecordNotFound, with: :verses_not_found

  def poem
    @questionnaire = JSON.parse(session[:questionnaire], symbolize_names: true)
    rawVerses = VerseSelector.select_verses(@questionnaire[:trait_category], @questionnaire[:message_category])
    @poem = PoemCustomizer.customize_poem(rawVerses, @questionnaire)
  end

  def verses_not_found
    render 'questionnaire/verses_not_found'
  end
end

我的测试:

describe "GET 'poem'" do
  it "renders questionnaire/verses_not_found.html if theres an ActiveRecord::RecordNotFound exception" do
    verse_selector = double("VerseSelector", select_verses: ActiveRecord::RecordNotFound.new("Verses not found"))
    get 'poem', nil, {questionnaire: {receiver_name:"a",location:"b",relationship:"coach",trait_category:"adventurous venturous",message_category:"You hurt my feelings"}}.to_json
    expect(response).to render_template(:verses_not_found)
  end
end

我完全不确定我的测试,目前会引发错误:NoMethodError: undefined method 'each' for #&lt;String:0xbcdf388&gt;

如何正确编写我的测试?

【问题讨论】:

  • 我会存根诗歌以引发 RecordNotFound,然后测试我自己调用诗歌时是否收到了 verses_not_found。然后另一个测试,看看后一种方法是否呈现了正确的页面。
  • 我会创建一个匿名操作来引发 RecordNotFound 并获取该操作以验证预期的模板是否已呈现

标签: ruby-on-rails exception ruby-on-rails-4 rspec rspec3


【解决方案1】:

我设法用以下代码模拟了ActiveRecord::RecordNotFound

it "renders questionnaire/verses_not_found.html if theres an ActiveRecord::RecordNotFound exception" do
  verse_selector = double("verse_selector")
  allow(verse_selector).to receive(:select_verses).and_return(ActiveRecord::RecordNotFound.new())
  get 'poem', nil, {"questionnaire" => {"receiver_name"=> "a","location"=> "b","relationship"=> "coach","trait_category"=> "adventurous venturous","message_category"=> "You hurt my feelings"}.to_json}
  expect(response).to render_template(:verses_not_found)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多