Я пытаюсь загрузить направляющие в тестовой среде с помощью рубинового сценария. Я попытался гуглить немного и нашел эту рекомендацию:
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
потому что я пытаюсь выполнить код Ruby после того, как я загружу направляющие. Более конкретно то, что я пытаюсь сделать: запустите .sql скрипт базы данных, загрузите направляющие и затем запустите автоматизированные тесты. Все, кажется, хорошо работает, но по любой причине направляющие, кажется, загружаются в среде разработки вместо тестовой среды.
Вот сокращенная версия кода, который я пытаюсь выполнить:
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
Я не должен запускать сервер, я просто должен загрузить свою кодовую базу направляющих (модели, контроллеры, и т.д.), таким образом, я могу запустить тесты против своего кода.
Спасибо за любую справку.
ОБНОВЛЕНИЕ:
У меня есть своя среда направляющих, теперь загружающаяся. Теперь я пытаюсь выполнить свои тестовые файлы в моей задаче граблей. Вот мой код:
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
Я думал, что требование "spec/models/blog_spec.rb" файл сделает это, но это, кажется, не запускает тесты...
Спасибо за справку к настоящему времени.
Вы знаете, что можно запускать юнит-, функциональные и интеграционные тесты из 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
The => :environment
загружает текущее окружение для вас. Затем вы можете запустить свою задачу в тестовом окружении следующим образом: RAILS_ENV=test rake custom_tests:run
для запуска тестовой среды вы должны запустить скрипт / сервер с параметром -e
param:
ruby script/server -e test
и в вашем config / database.yml должно быть определение test env, например:
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000