我想将现有的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
测试和断言消失了。可能是什么原因?
系统信息:
答案 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"