【问题标题】:Rspec testing without database没有数据库的 Rspec 测试
【发布时间】:2018-09-04 22:29:34
【问题描述】:

各位请多多包涵。我的管理团队已要求我执行以下操作,我将非常感谢您提供的任何建议。

假设我有一个控制器,代码如下:

class ListsController < ApplicationController
  def show
    @list = List.create(slug: params[:slug], something: params[:something])

    render 'home/index'
  end
end

现在我想用 rspec 测试这段代码,但是没有 db 来保存或接收对象(之前有一个,但是在运行测试时我们被要求删除它)。

所以我的问题:

  1. 首先是否可以在没有 db 的情况下对其进行测试?
  2. 如果是,那怎么办?

到目前为止,我已经尝试使用nulldb gem 来删除 db 依赖项。但是当无法检索到创建的对象时,问题就来了。我曾尝试对创建的对象进行存根和模拟,但到目前为止还没有奏效。即使这样做,也需要很长时间才能遵循这一点并测试完整的应用程序。

编辑:

我也尝试过 factory_bot。但这仅有助于实例化一个对象。但是我以后怎样才能找回它们呢?

如果您有什么需要更好地理解它或者我遗漏了什么,请告诉我。伙计们,任何帮助表示赞赏。

【问题讨论】:

  • 你可能想看看这个宝石https://github.com/thoughtbot/factory_bot
  • 如果有帮助请告诉我
  • 虽然可以做到,但目前测试控制器的首选方法是通过集成规范。在这种情况下,将数据库存根是一项愚蠢的差事,它会降低测试的敏锐度并导致错误最终出现在生产环境中。问题可能正在向管理团队解释。
  • @Verty00 我也尝试过 factory_bot。它们仍然需要保存以便以后检索。他们的构建在某些情况下有效,但无法获得无法保存在任何地方的东西。
  • @max 我完全同意你的看法。这正是我一直试图解释的,但无济于事。他们坚持无论如何都希望将其删除。

标签: ruby-on-rails testing rspec mocking


【解决方案1】:

我用nulldb gem 替换了数据库适配器。

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多