MiniTest和Rails入门

moo*_*lum 16 ruby ruby-on-rails minitest ruby-1.9.2

我想从模型开始将现有的rails应用程序从rspec切换到minitest.因此我创建了一个文件夹test.在那里我创建了一个名为minitest_helper.rb以下内容的文件:

require "minitest/autorun"

ENV["RAILS_ENV"] = "test"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

现在我可以运行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
Run Code Online (Sandbox Code Playgroud)

真好.但是现在我想要加载环境并将以下行添加到minitest_helper.rb(从rspec的等效文件中复制):

require File.expand_path("../../config/environment", __FILE__)
Run Code Online (Sandbox Code Playgroud)

现在我再次运行它,结果如下:

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
Run Code Online (Sandbox Code Playgroud)

测试和断言都消失了.可能是什么原因?

系统信息:

  • ruby 1.9.2p180(2011-02-18修订版30909)[x86_64-darwin10.8.0]
  • Rails 3.1.0.rc4

小智 16

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

group :test do
  gem 'rspec'
end
Run Code Online (Sandbox Code Playgroud)

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

所以这里有两个解决方案:1.从测试环境中删除rspec gem 2.如果你仍然希望在切换到minitest时运行rspecs,你可以单独留下'test'环境并定义另一个专门针对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
Run Code Online (Sandbox Code Playgroud)

(一部分)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"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你这个优秀的答案.它解决了我的问题. (4认同)