MiniTest和Rails入门

时间:2011-07-23 21:02:38

标签: ruby-on-rails ruby ruby-1.9.2 minitest

我想将现有的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 个答案:

答案 0 :(得分:16)

由于您正在从rspec切换应用程序,因此很可能在Gemfile中指定的测试环境中有rspec gem,如:

group :test do
  gem 'rspec'
end

当您使用ENV["RAILS_ENV"] = "test"加载'test'环境时,您正在加载rspec,它定义了自己的describe方法并覆盖了minitest定义的方法。

所以这里有2个解决方案: 1.从测试环境中删除rspec gem 2.如果您仍希望在切换到minitest时运行rspec,则可以单独保留“测试”环境并定义另一个专门针对minitest的测试环境。让我们称之为minitest - 将config / environment / test.rb复制到config / enviroment / minitest.rb,为minitest环境定义数据库,并更新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"