Travis CI未能使用** / * _ test.rb模式运行测试

时间:2015-05-05 15:40:21

标签: ruby rspec travis-ci minitest

我的微型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-unitsource)引起的(我的代码在代码中的任何位置都没有引用test-unit

所以我很好奇的是,如果有人知道如何解决这个问题。

就像我说的那样,除了Travis CI之外,其它地方都有效。

1 个答案:

答案 0 :(得分:0)

问题是Travis CI将存储库克隆到/home/travis/build/username/projectname,然后将bundle install克隆到 --deployment标志,用于将宝石安装到vendor文件夹

/home/travis/build/username/projectname/verdor

我的Rakefile正在使用测试模式**/*_test.rb因此在所有文件夹中运行测试,因此它正在加载verdor目录和来自依赖项(外部gem)的所有测试,其中一些是TestUnitMiniTest

不兼容

解决方案是在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