测试控制器 - 使用包含查找时未找到记录

发布于 2024-11-08 01:21:44 字数 562 浏览 0 评论 0原文

我正在测试在 find 语句中使用 include 的控制器操作。测试运行时它会引发 RecordNotFound。我错过了什么吗?我应该如何处理这些事情的测试?

控制器:

def show
  @forum_sub_topic = ForumSubTopic.includes(:forum_posts => [:post_replies]).find(params[:id])
  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @forum_sub_topic }
  end
end

测试:

it 'renders show template' do
  ForumSubTopic.stub(:find).with("37") { mock_forum_sub_topic }
  get :show, :id => "37"
  response.should render_template('show')
ebd

I'm testing a controller action that uses includes in the find statement. It raises RecordNotFound when the test runs. Am I missing something? How should I be handling tests on such things?

Controller:

def show
  @forum_sub_topic = ForumSubTopic.includes(:forum_posts => [:post_replies]).find(params[:id])
  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @forum_sub_topic }
  end
end

Test:

it 'renders show template' do
  ForumSubTopic.stub(:find).with("37") { mock_forum_sub_topic }
  get :show, :id => "37"
  response.should render_template('show')
ebd

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

謌踐踏愛綪 2024-11-15 01:21:44

您正在 ForumSubTopic 上存根 :find,但您的控制器正在 ActiveRecord::Relation 上调用 .find对象而不是 ForumSubTopic 模型。

如果你不太关心 with("37") 部分(因为我不确定是否可以这样做),RSpec 提供了一个 stub_chain 方法这应该适合你:

ForumSubTopic.stub_chain(:includes, :find) { mock_forum_sub_topic }

否则,你可以将多个存根放入:

ForumSubTopic.stub(:includes) { ForumSubTopic }
ForumSubTopic.stub(:find).with("37") { mock_forum_sub_topic }

You're stubbing :find on ForumSubTopic, but your controller is calling .find on an ActiveRecord::Relation object rather than the ForumSubTopic model.

If you don't care so much about the with("37") part (because I'm not sure if it's possible doing this), RSpec provides a stub_chain method that should work for you:

ForumSubTopic.stub_chain(:includes, :find) { mock_forum_sub_topic }

Otherwise, you could put multiple stubs in:

ForumSubTopic.stub(:includes) { ForumSubTopic }
ForumSubTopic.stub(:find).with("37") { mock_forum_sub_topic }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文