【问题标题】:How should I test my Rails app?我应该如何测试我的 Rails 应用程序?
【发布时间】:2012-04-02 01:48:39
【问题描述】:

在过去的几天里,我一直在缓慢地向我一直在开发的现有 Rails 应用程序添加测试。

我只是想弄清楚有多少和什么样的测试(单元、功能、集成)足以节省我调试和修复破坏现有功能的部署的时间。

我是唯一一个在这个应用程序上工作的人。它基本上是一家小公司(约 20 名员工)的库存管理数据库。我没有从一开始就添加测试,因为我没有真正理解这一点,但我有几个部署在最后一点点搞砸了现有功能,所以我认为添加它可能是一件好事。

我是否需要单独测试我的模型和控制器并执行集成测试?似乎有些开发人员认为,如果您从那里收到错误,您应该只进行集成测试和回溯以找出问题所在。

到目前为止,我使用的是 RSpec + Factory Girl + Shoulda。这使得为​​模型设置测试变得非常容易。

我现在开始使用控制器并且有点迷失了。我知道如何测试单个控制器,但我不知道我是否应该只使用集成测试来测试应用程序流,因为那样会同时测试控制器。

【问题讨论】:

    标签: ruby-on-rails testing rspec


    【解决方案1】:

    我使用集成测试来测试成功路径和一般失败路径,但对于边缘情况或更深入的场景,我会编写模型/视图/控制器测试。

    我通常在编写应用程序功能之前编写测试,但如果您想在之后添加测试,那么我建议使用 SimpleCov 之类的东西来查看应用程序的哪些区域需要更多测试,然后慢慢建立测试覆盖率你的申请。

    【讨论】:

      【解决方案2】:

      在应用程序编写完成之后再编写测试会很乏味。至少您应该测试集成案例(这将测试大多数控制器功能和视图),并且还分别对测试进行建模,以便您的模型调用按您认为的那样工作。

      对于集成测试,我发现 Capybara 易于使用。

      【讨论】:

        【解决方案3】:

        根据经验,您的大部分测试都需要是单元的、一些功能性的、很少的集成。

        Rails 全心全意地坚持这一点,您也应该这样做。

        至少你必须拥有:

        • 每个模型的单元测试,为每个模型中的每个验证添加一个测试用例,最后添加一个以确保模型已保存。如果您在相关模型(has_manybelongs_to)上有 dependant: :destroytouch: true 之类的东西,也请为它们添加测试用例。
        • 每个控制器的功能测试。每个操作的测试用例。某些操作可能有多个响应(例如 422 错误的情况),因此添加另一个案例来测试错误响应。如果您有授权过滤器,也请对其进行测试。

        然后您可以对典型的新用户流进行集成测试。像 注册 -> 创建帖子 -> 查看它 -> 注销。另一个是确保未经授权的用户无法访问您的资源。

        从现在开始,不要在没有上述测试的情况下提交 ANY 代码。

        植树的最佳时间是 10 年前,其次是现在,所以开始测试吧!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-15
          • 1970-01-01
          • 2010-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多