Getting Started with MiniTest and Rails
I want to switch an existing rails application from rspec to minitest starting wi开发者_StackOverflow中文版th the models. Therefore I created a folder test
. Inside there I created a file named minitest_helper.rb
with the following content:
require "minitest/autorun"
ENV["RAILS_ENV"] = "test"
and the folder models
containing 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
Now I can run ruby -Itest test/models/forum_spec.rb
with the following result:
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
That's nice. But now I want the environment to be loaded and I add the following line to minitest_helper.rb
(copied from the equivalent file from rspec):
require File.expand_path("../../config/environment", __FILE__)
Now I run it again with the following result:
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
The Tests and assertions are gone. What could be the reason for that?
System Info:
- ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.8.0]
- Rails 3.1.0.rc4
Since you are switching the app from rspec, you most probably have rspec gem in test environment specified in Gemfile, something like:
group :test do
gem 'rspec'
end
When you load up the 'test' environment with ENV["RAILS_ENV"] = "test"
, you are loading up the rspec, which defines its own describe
method and overrides the one defined by minitest.
So there are 2 solutions here: 1. Remove rspec gem from test environment 2. If you still want to run rspecs while switching to minitest, you can leave the 'test' environment alone and define another test environment specifically for minitest. Let's call it minitest - copy the config/environment/test.rb to config/enviroment/minitest.rb, define database for minitest environment, and update minitest_helper to set RAILS_ENV to 'minitest':
$ cp config/environments/test.rb config/environments/minitest.rb
(a portion of) 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"
精彩评论