rspec find_by_id和错误的参数数量(0表示1)

时间:2012-10-05 20:49:13

标签: ruby-on-rails rspec

不知怎的,我无法弄清楚为什么我的请求规范因错误而失败:

参数数量错误(0表示1)

当我在show方法中使用find_by_id时。

这是我的show方法

def show
  @message = Message.find_by_id(params[:id])

  # rest of code
end

这是我的要求规范

require 'spec_helper'

describe "message pages" do
  subject { page }

  before do
    @message = FactoryGirl.create(:message)
  end

  it "should show message page properly" do
    visit message_path(@message.id)
    page.should have_content(@message.content) # this fails as message path ends up with wrong number of arguments error
  end
end

如果我将find_by_id()更改为find(),那么一切正常。我需要find_by_id,因为我不想提出404错误而是想检查是否nil然后将用户引导到适当的页面。

2 个答案:

答案 0 :(得分:2)

你可以尝试:

visit message_path(@message)

visit message_path(id: @message.id)

并报告回来

答案 1 :(得分:0)

而不是“find_by_id”(顺便说一句,已经弃用了......)你可以使用find并从异常中解救出来。这更简单。

def show
  begin
    @message = Message.find(params[:id])
  rescue ActiveRecord::NotFound
    do whatever you want on missing message
    return
  end
  # rest of code
end