我的微型Ruby项目测试在我的机器上,在私有VM上运行,但在Travis CI bulid上失败
项目同时使用rspec
(+ rspec-given
)和minitest
完整跟踪:https://travis-ci.org/equivalent/code_katas/jobs/61321482
$ bundle exec rake
MiniTest::Unit::TestCase is now Minitest::Test. From /home/travis/.rvm/rubies/ruby
2.1.4/lib/ruby/2.1.0/test/unit/testcase.rb:8:in `<module:Unit>'
/home/travis/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/test/unit.rb:676:in `<class:Runner>': undefined method `_run_suite' for class `Test::Unit::Runner' (NameError)
from /home/travis/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/test/unit.rb:261:in `<module:Unit>'
from /home/travis/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/test/unit.rb:15:in `<module:Test>'
from /home/travis/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/test/unit.rb:7:in `<top (required)>'
from /home/travis/build/equivalent/code_katas/vendor/bundle/ruby/2.1.0/gems/sorcerer-1.0.2/test/sorcerer/resource_test.rb:3:in `require'
#...
错误是不言自明的MiniTest::Unit::TestCase is now Minitest::Test
。这是由rspec-given
依赖sorcerer
使用test-unit
(source)引起的(我的代码在代码中的任何位置都没有引用test-unit
)
所以我很好奇的是,如果有人知道如何解决这个问题。
就像我说的那样,除了Travis CI之外,其它地方都有效。
答案 0 :(得分:0)
问题是Travis CI将存储库克隆到/home/travis/build/username/projectname
,然后将bundle install
克隆到
--deployment
标志,用于将宝石安装到vendor
文件夹
/home/travis/build/username/projectname/verdor
我的Rakefile
正在使用测试模式**/*_test.rb
因此在所有文件夹中运行测试,因此它正在加载verdor目录和来自依赖项(外部gem)的所有测试,其中一些是TestUnit
与MiniTest
解决方案是在Rakefile中加载测试而不是pattern
,而是使用:
Rake::TestTask.new(:test) do |t|
t.test_files = Dir['**/*_test.rb'].reject do |path|
path.include?('vendor') # tell travis CI to ignore vendor tests
end
end
类似适用于RSpec
RSpec::Core::RakeTask.new(:spec) do |t|
t.pattern = Dir.glob('**/*_spec.rb').reject do |path|
path.include?('vendor') # tell travis CI to ignore vendor tests
end
# t.rspec_opts = '--format documentation'
end