I'm trying to load up rails in the test environment using a ruby script. I've tried googling a bit and found this recommendation:
require "../../config/environment"
ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'test'
This seems to load up my environment alright, but my development database is still being used. Am I doing something wrong?
Here is my database.yml file... however I don't think it is the issue
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
I can't use
ruby script/server -e test
because I'm trying to run ruby code after I load rails. More specifically what I'开发者_StackOverflow中文版m trying to do is: run a .sql database script, load up rails and then run automated tests. Everything seems to be working fine, but for whatever reason rails seems to be loading in the development environment instead of the test environment.
Here is a shortened version of the code I am trying to run:
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
I don't need to start a server, I just need to load my rails code base (models, controllers, etc..) so I can run tests against my code.
Thanks for any help.
UPDATE:
I have my rails environment now loading. Now I'm trying to run my test files within my rake task. Here is my code:
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
I thought the require "spec/models/blog_spec.rb" file would do it, but it doesn't seem to run the tests...
Thanks for the help thus far.
This command did it for me. I was able to load up the test env aloong with it's Database.
$rails s -e test
to start test environment you should run script/server with -e
param:
ruby script/server -e test
and in your config/database.yml must be defenition of test env database, i.e.:
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
You know you can run your unit, functional and integration tests from Rake, right ? Check out the output of rake -T test
to see how.
In case you need something more custom, you can create your own Rake task. Put something like this in a file in 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
The => :environment
loads the current environment for you. Then, you can run your task in the test environment like this: RAILS_ENV=test rake custom_tests:run
精彩评论