16

I want to switch an existing rails application from rspec to minitest starting with 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
moonglum
  • 801
  • 5
  • 13
  • Have you tried creating a new test app and copying over the files it creates? The `test_helper.rb` created by Rails 3.0.5 (which is what I have on my machine now) looks different from yours. – s.m. Jul 23 '11 at 22:00
  • @s.m. The difference is the missing `require 'rails/test_help'` (and support for fixtures) at the end. Added that, changed nothing. – moonglum Jul 23 '11 at 22:27
  • +1 great and detailed question! – EinLama Aug 06 '11 at 16:27
  • isn't the environment already loaded in the first case? – deb Aug 06 '11 at 23:52

1 Answers1

16

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"
sinjed
  • 906
  • 7
  • 10