Начало работы с MiniTest и Rails
Я хочу переключить существующее приложение rails с rspec на minitest, начиная с моделей. Поэтому я создал папку test
. Внутри я создал файл с именем minitest_helper.rb
со следующим содержимым:
require "minitest/autorun"
ENV["RAILS_ENV"] = "test"
и папка models
, содержащая forum_spec.rb
:
require "minitest_helper"
describe "one is really one" do
before do
@one = 1
end
it "must be one" do
@one.must_equal 1
end
end
Теперь я могу запустить ruby -Itest test/models/forum_spec.rb
со следующим результатом:
Loaded suite test/models/forum_spec
Started
.
Finished in 0.000553 seconds.
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 12523
Это хорошо. Но теперь я хочу, чтобы среда была загружена, и я добавлю следующую строку в minitest_helper.rb
(скопированную из эквивалентного файла из rspec):
require File.expand_path("../../config/environment", __FILE__)
Теперь я запускаю его снова со следующим результатом:
Loaded suite test/models/forum_spec
Started
Finished in 0.001257 seconds.
0 tests, 0 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 57545
Тесты и утверждения исчезли. Что может быть причиной этого?
Информация о системе:
- ruby 1.9.2p180 (2011-02-18 редакция 30909) [x86_64-darwin10.8.0]
- Rails 3.1.0.rc4
Ответы
Ответ 1
Поскольку вы переключаете приложение из rspec, у вас, скорее всего, есть rspec gem в тестовой среде, указанной в Gemfile, что-то вроде:
group :test do
gem 'rspec'
end
Когда вы загружаете среду "test" с помощью ENV["RAILS_ENV"] = "test"
, вы загружаете rspec, который определяет свой собственный метод describe
и переопределяет значение, определенное минитестом.
Итак, здесь есть два решения:
1. Удалите драгоценный камень rspec из тестовой среды
2. Если вы все еще хотите запустить rspecs при переключении на минитест, вы можете оставить среду "test" самостоятельно и определить другую тестовую среду специально для minitest. Позвольте называть его minitest - скопируйте config/environment/test.rb в config/enviroment/minitest.rb, определите базу данных для миниатюрной среды и обновите minitest_helper, чтобы установить RAILS_ENV в "minitest":
$ cp config/environments/test.rb config/environments/minitest.rb
(часть) config/database.yml
:
minitest:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
test/minitest_helper.rb:
ENV["RAILS_ENV"] = "minitest"
require File.expand_path("../../config/environment", __FILE__)
require "minitest/autorun"