Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails2.3.8:单元测试:Rails/Ruby在每次测试之前都要运行设置。那么在所有测试之前运行的方法呢?_Ruby On Rails_Ruby_Unit Testing_Testing - Fatal编程技术网

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设置单个用户不会花费很长时间。。。您是否过早地进行了优化,或者是有什么原因导致它花费了很长时间(例如访问远程服务器)?