【问题标题】:Ruby on Rails2.3.8: Unit Testing: Rails/Ruby has setup to run before each test. What about a method that runs before all tests?Ruby on Rails2.3.8:单元测试:Rails/Ruby 已设置为在每次测试之前运行。在所有测试之前运行的方法怎么样?
【发布时间】:2011-09-19 13:45:35
【问题描述】:

我想在每次运行测试时初始化数据库一次,而不是每次测试。 我知道 Rspec 有 before(:all),但我无法让它工作。我想知道rails是否有类似的东西。

【问题讨论】:

    标签: ruby-on-rails ruby unit-testing testing


    【解决方案1】:

    首先:在 Test::Unit 中曾经有一个 before(:all) 等价物,但它被删除了(不知道为什么)。

    其次:有很好的理由不做你想做的事情 - 测试应该彼此独立运行,而不是依赖于数据库中的状态。通过这种方式,您可以保证它正在测试完全您期望它测试的内容。

    如果您有一个更改数据库状态的测试,并且您移动它并且它在另一个预期它是另一种状态的测试之后运行 - 您会遇到问题。因此,所有测试都必须是独立的。

    因此:数据库会回滚到其原始状态并每次重新播种。

    如果您真的想要 db 始终处于某种状态 - 然后在夹具中设置它...然后意识到每次测试都会重新加载 db。

    如果您在加载时间方面遇到问题...然后考虑找出解决问题的其他方法 - 例如,不要使用大量的固定装置,而是使用工厂只为每个人创建您需要的数据测试。

    如果有其他原因...请告诉我们 - 我们可能有解决方案。

    编辑:如果你真的需要它,我其实早就为此写了一个猴子补丁: "faking startup and shutdown"

    【讨论】:

    • 我正在测试的应用程序使用了疯狂的订阅服务。所以我使用相同的用户和帐户进行所有测试。由于订阅服务是一个插件,它带有自己的测试,我们不需要测试任何用户/帐户的东西。
    • 好的 - 但我还不明白为什么你需要使用不同的设置。你能解释一下为什么它不能按通常的方式工作吗?
    • 它有效。它只是很慢,而且由于每次测试的用户和帐户都是相同的,我想我可以通过某种 before(:all) 或其他东西来加快速度 =\
    • 在我的设置中,我有 2 个 rake 任务正在运行......这就是为什么它很慢 ^_~ 并重复这些...... zomg 慢
    • 嗯,设置单个用户应该不会花费很长时间...您是在过早优化还是有什么导致它需要很长时间(例如访问远程服务器)?
    【解决方案2】:

    所有东西都运行在所有东西都进入类的顶部之前

    require 'test_helper'
    
    class ObjectTest < ActiveSupport::TestCase
      call_rake("db:bootstrap RAILS_ENV=test")
    
      #set up our user for doing all our tests (this person is very busy)  
      @user = Factory(:user)
      @account = Factory(:account)    
      @user.account = @account
      @user.save
    
      # make sure our user and account got created 
      puts "||||||||||||||||||||||||||||||||||||||||||||||"
      puts "| propsal_test.rb"
      puts "|      #{@user.name}"
      puts "|      #{@user.account.name}"
      puts "||||||||||||||||||||||||||||||||||||||||||||||"
    

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 2018-07-21
      相关资源
      最近更新 更多