Ruby on rails RubyonRails2.3.8:单元测试:Rails/Ruby在每次测试之前都要运行设置。那么在所有测试之前运行的方法呢?
我希望在每次运行测试时初始化数据库一次,而不是每次测试。Ruby on rails RubyonRails2.3.8:单元测试:Rails/Ruby在每次测试之前都要运行设置。那么在所有测试之前运行的方法呢?,ruby-on-rails,ruby,unit-testing,testing,Ruby On Rails,Ruby,Unit Testing,Testing,我希望在每次运行测试时初始化数据库一次,而不是每次测试。 我知道Rspec以前有(:all),但我一直无法让它工作。我想知道rails是否有类似的功能。首先:Test::Unit中曾经有一个before(:all)等价物,但它被删除了(不知道为什么) 第二:有很好的理由不去做你想做的事情——测试应该彼此独立运行,而不是依赖于数据库中的状态。通过这种方式,您可以保证它正在测试您期望它测试的内容 如果您有一个测试更改了数据库的状态,并且您移动了它,它在另一个测试之后运行,而该测试预期它将是另一个状态
我知道Rspec以前有(:all),但我一直无法让它工作。我想知道rails是否有类似的功能。首先:Test::Unit中曾经有一个before(:all)等价物,但它被删除了(不知道为什么) 第二:有很好的理由不去做你想做的事情——测试应该彼此独立运行,而不是依赖于数据库中的状态。通过这种方式,您可以保证它正在测试您期望它测试的内容 如果您有一个测试更改了数据库的状态,并且您移动了它,它在另一个测试之后运行,而该测试预期它将是另一个状态,那么您将遇到问题。因此,所有测试都必须是独立的 因此,db将回滚到其原始状态,并每次重新播种 如果你真的想要db始终处于某种状态,那么在Fixture中设置它。。。只要意识到每次测试都会重新加载db 如果您在加载时间方面遇到问题。。。然后考虑解决问题的其他方法——例如不要使用大量的固定设备,而是使用工厂来创建每个测试所需的数据。 如果还有其他原因。。。让我们知道-我们可能有一个解决方案 编辑:如果你真的需要它,很久以前我就为它写了一个猴子补丁:
所有的东西都要先跑,然后才能在班上名列前茅
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 "||||||||||||||||||||||||||||||||||||||||||||||"
需要“测试助手”
类ObjectTest
我正在测试的应用程序使用了疯狂的订阅服务。所以我在所有测试中都使用相同的用户和帐户。由于订阅服务是一个插件,它有自己的测试,我们不需要测试任何用户/帐户的东西。好吧-但我还不明白为什么你需要使用不同的设置。你能再解释一下为什么它不能正常工作吗?它能工作。它只是很慢,而且由于每个测试的用户和帐户都将是相同的,所以我想我可以通过使用某种before(:all)或某物来加快速度=\在我的设置中,我有两个rake任务正在运行。。。这就是为什么它很慢并且重复这些。。。。ZomgSlowhmm设置单个用户不会花费很长时间。。。您是否过早地进行了优化,或者是有什么原因导致它花费了很长时间(例如访问远程服务器)?