你有什么建议来测试我的Ruby on Rails应用程序?

时间:2011-09-15 18:32:15

标签: ruby-on-rails ruby ruby-on-rails-3 testing tdd

我正在使用Ruby on Rails 3.0.10,我打算尽快切换到versioni 3.1。使用新的RoR版本,我还计划在我的应用程序中添加自动化测试。

  1. 为了测试我的申请,您有什么建议?
  2. 您是否建议阅读和/或使用软件?
  3. 如果我开始为RoR 3.0.10编写测试,这些测试将在RoR 3.1中可用并兼容吗?
  4. 简而言之,我想知道所有关于我可以,应该和“必须”使用的测试来改进我的应用程序(来测试jQuery-JavaScript代码)。

3 个答案:

答案 0 :(得分:2)

自动化测试是什么意思?

如果您的意思是单元/功能/集成测试,那么在升级到Rails 3.1之前,您应该具备这些功能。它们将非常有助于在升级过程中找到破坏的位置,当它们全部通过时,您可以对应用程序再次运行有一定程度的信心。

如果通过自动化测试,您指的是更高级别的内容,例如UI测试(我将其解释为),我建议使用WatirSelenium。像这样的测试应该仍然有效,并且不会受到底层实现的影响(无论是Rails 3.0.10还是3.1)。只要该应用程序仍然有效,那些测试仍然有效。

答案 1 :(得分:1)

  1. 使用Rspec 2
  2. 使用Capybara
  3. 使用Spork
  4. 使用Guard
  5. Guard + Spork(+ Rspec + Capybara)=自动化测试。

    我不建议使用黄瓜。每个人都喜欢Cucumber,但它的工作量远远超过它的价值。这是一个正则表达层,除了你可以用Rspec + Capybara与the new acceptance testing feature轻松完成之外(它是一个单独的宝石,现在它包含在rspec中)。

    构建应用时,我建议您这样做:

    1. 在概念化模型时,请编写Rspec模型测试说明。像it "should save a :start_date"这样的事情。首先通过编写属性测试(它接受的start_date值,如何处理无效值等)开始构建模型。然后根据需要,在模型之间编写集成测试。它们是模型测试,而不是单元测试。当您为模型属性编写测试时,这些是单元测试(隔离类测试)。当你在模型之间测试功能时(当我做user.posts.create(:title => "My first blog post")时,我希望为该用户创建一个帖子),这些在我看来是“集成”测试。在Rspec中,这些是“模型”测试。
    2. 在获得模型的基础知识后,编写视图测试。为了在视图测试中实现断言,您需要设置Spork,Guard和Capybara。然后你需要编写你的Haml ...然后你的控制器代码...最后,你将编写代码以使视图测试通过。同时进行控制器和视图测试的想法是过度的。使用Rspec + Capybara验收测试,您可以将所有内容包装到spec/acceptance目录中。节省您的时间和思考。最后,您要彻底测试模型,并彻底测试请求/ html。
    3. 随着您的应用变大,测试运行时间会更长。运行所有测试可能需要10-20分钟!这会很快让你失望,特别是如果你想要的只是在重新推动之前解决错误。要避免这种情况,请找出使用种子数据的聪明方法(每次测试之间不需要重新创建的数据),或者使用模拟数据的巧妙方法,以及设置Spork。通过不必在测试运行之间重新加载Rails服务器,您减少了一段时间。使用Guard + Spork,您不需要自动测试(自动测试已过时)。
    4. 如果你想更进一步,你可以测试你的javascript。这仍然是一个非常新的领域。现在有两种方法,1)使用Capybara和启用javascript的驱动程序(selenium是唯一一个真正适用于此帖子的人),或2)使用jasmine。如果您的应用不是“纯粹的javascript”应用,我会等待这个。
    5. 对于Javascript测试,我正在考虑构建some sort of node.js/websocket layer,允许您在Mac和Windows上(通过Parallels或VMWare Fusion或其他)对您的Rails + Spork测试服务器本地运行jasmine测试,是更好的方法来进行视图+ javascript测试,因为你可以获得整个应用程序,因为它确实在生产中。

      到目前为止,您只需要构建一个可靠的Rails应用程序。希望有所帮助,兰斯。

答案 2 :(得分:0)

首先必须在代码之前编写测试。

我建议通过测试覆盖您的应用程序,然后在您的情况下切换到Rails 3.1。

我更喜欢同时使用rspeccucumber。 这是测试TDD(rspec)和BDD(黄瓜)的两种不同方法。