пусковые рельсы в тестовой среде - PullRequest
7 голосов
/ 12 мая 2010

Я пытаюсь загрузить рельсы в тестовой среде, используя скрипт ruby. Я попытался немного погуглить и нашел эту рекомендацию:

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, загрузить рельсы, а затем запустить автоматические тесты. Кажется, все работает нормально, но по какой-то причине 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 (модели, контроллеры и т. Д.), Чтобы я мог запускать тесты для своего кода.

Спасибо за любую помощь.

UPDATE:

У меня загружается среда для моих рельсов. Теперь я пытаюсь запустить мои тестовые файлы в рамках моей задачи 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

Я думал, что потребуется файл spec / models / blog_spec.rb, но, похоже, тесты не запускаются ...

Спасибо за помощь.

Ответы [ 3 ]

33 голосов
/ 28 июля 2014

Эта команда сделала это для меня. Я был в состоянии загрузить тестовую среду в течение всей его базы данных.

$rails s -e test
9 голосов
/ 12 мая 2010

для запуска тестовой среды вы должны запустить скрипт / сервер с -e param:

ruby script/server -e test

и в вашем config / database.yml должно быть определение тестовой базы данных env, т.е. :

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000
6 голосов
/ 12 мая 2010

Вы знаете, что вы можете запускать свои юнит-тесты, функциональные и интеграционные тесты от 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

=> :environment загружает текущую среду для вас. Затем вы можете запустить свою задачу в тестовой среде следующим образом: RAILS_ENV=test rake custom_tests:run

...