在测试环境下启动Rails

9

我正在尝试使用Ruby脚本在测试环境中加载Rails。我尝试过搜索一些资料,并找到了以下建议:

require "../../config/environment"
ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'test'

这似乎正确地加载了我的环境,但是我的开发数据库仍在使用中。我做错了什么吗?
这是我的database.yml文件...但我认为这不是问题所在。
development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: BrianSite_development
  pool: 5
  username: root
  password: dev
  host: localhost

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: BrianSite_test
  pool: 5
  username: root
  password: dev
  host: localhost

production:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: BrianSite_production
  pool: 5
  username: root
  password: dev
  host: localhost

我无法使用

ruby script/server -e test

因为我正在尝试在加载Rails后运行Ruby代码。更具体地说,我正在尝试运行一个.sql数据库脚本,加载Rails,然后运行自动化测试。一切似乎都很正常,但由于某种原因,Rails似乎是在开发环境而不是测试环境中加载。
这是我尝试运行的代码的缩短版本:
system "execute mysql script here"

require "../../config/environment"
ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'test'

describe Blog do
  it "should be initialized successfully" do
    blog = Blog.new
  end
end

我不需要启动服务器,只需要加载我的Rails代码库(模型、控制器等),这样我就可以对我的代码运行测试。
感谢任何帮助。
更新:
我现在已经成功加载了我的Rails环境。现在我正在尝试在我的rake任务中运行我的测试文件。以下是我的代码:
require"spec"
require "spec/rake/spectask"
RAILS_ENV = 'test'

namespace :run_all_tests do
  desc "Run all of your tests"

  puts "Reseting test database..."
  system "mysql --user=root --password=dev < C:\\Brian\\Work\\Personal\\BrianSite\\database\\BrianSite_test_CreateScript.sql"
  puts "Filling database tables with test data..."
  system "mysql --user=root --password=dev < C:\\Brian\\Work\\Personal\\BrianSite\\database\\Fill_Test_Tables.sql"

  puts "Starting rails test environment..."
  task :run => :environment do
    puts "RAILS_ENV is #{RAILS_ENV}"
    require "spec/models/blog_spec.rb"
  end
end

我以为 require "spec/models/blog_spec.rb" 文件可以做到,但似乎并没有运行测试...

感谢您迄今为止的帮助。


显示你的config/database.yml文件。 - fl00r
好的,我不太明白具体的问题。你可以尝试清楚地指定 ENV["RAILS_ENV"] = "test" require File.expand_path('../../config/environment', __FILE__) - fl00r
3个回答

40

这个命令对我很有帮助。我能够加载测试环境以及它的数据库。

$rails s -e test

9

要启动测试环境,您应该使用-e参数运行script/server脚本:

ruby script/server -e test

在您的config/database.yml文件中必须定义测试环境数据库,例如:

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

6

您知道可以通过Rake运行单元测试、功能测试和集成测试吗?只需要执行rake -T test命令查看输出即可。

如果需要更加个性化的操作,您可以创建自己的Rake任务。在lib/tasks目录下创建一个文件并添加如下内容:

namespace :custom_tests do
  desc "Run my custom tests"
  task :run => :environment do
    puts "RAILS_ENV is #{RAILS_ENV}"
    system "execute mysql script here"
    # Do whatever you need to do
  end
end
< p > => :environment 加载当前的环境。然后,您可以像这样在测试环境中运行任务:RAILS_ENV=test rake custom_tests:run


非常感谢!我对Ruby和Rails还很陌生,不知道rake的能力。现在我只是想在这个rake任务中运行我的测试文件。我已经更新了我的问题并附上了我的当前代码。再次感谢您的帮助。 - Brian DiCasa
哦!如果你正在使用Rspec,你应该看看rspec-rails插件(http://wiki.github.com/dchelimsky/rspec/rails)。它将为你提供许多与Rails相关的辅助方法。此外,它还会为你提供一个运行所有规范的Rake任务(rake spec)。你也可以查看Peepcode关于Rspec的屏幕录像(http://peepcode.com/products/rspec-basics)。我发现它们对我入门非常有帮助。干杯! - agregoire
我研究了rspec-rails插件,但它要求您使用迁移,而我没有。这就是为什么在运行测试之前,我一直在费力地运行mysql脚本等的原因。 - Brian DiCasa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接