How do I effectively force Minitest to run my tests in order?

前端 未结 5 1241
走了就别回头了
走了就别回头了 2021-01-18 04:34

I know. This is discouraged. For reasons I won\'t get into, I need to run my tests in the order they are written. According to the documentation, if my test class (we\'ll c

相关标签:
5条回答
  • 2021-01-18 05:06

    If you just add test_order: alpha to your test class, the tests will run in order:

    class TestHomePage
    
    def self.test_order
     :alpha
    end
    
    def test_a
     puts "a"
    end
    
    def test_b
     puts "b"
    end
    
    end 
    
    0 讨论(0)
  • 2021-01-18 05:06

    Note that, as of minitest 5.10.1, the i_suck_and_my_tests_are_order_dependent! method/directive is completely nonfunctional in test suites using MiniTest::Spec syntax. The Minitest.test_order method is apparently not being called at all.

    EDIT: This has been a known issue since Minitest 5.3.4: see seattlerb/minitest#514 for the blow-by-blow wailing and preening.

    You and I aren't the ones who "suck". What's needed is a BDD specification tool for Ruby without the bloat of RSpec and without the frat-boy attitude and contempt for wider community practices of MiniTest. Does anyone have any pointers?

    0 讨论(0)
  • 2021-01-18 05:11

    i_suck_and_my_tests_are_order_dependent! may be a later addition to minitest & not available as a Ruby core method. In that case, you'd want to force use of your gem version:

    require 'rubygems'
    gem 'minitest'
    
    0 讨论(0)
  • 2021-01-18 05:25

    I think that the method *test_order* should be a class method and not a instance method like so:

    # tests are order dependent
    def self.test_order
      :alpha
    end
    
    0 讨论(0)
  • 2021-01-18 05:30

    The best way to interfere in this chain may be to override a class method runnable_methods:

    def self.runnable_methods
      ['run_first'] | super | ['run_last']
    end
    
    #Minitest version:
    def self.runnable_methods
      methods = methods_matching(/^test_/)
    
      case self.test_order
      when :random, :parallel then
        max = methods.size
        methods.sort.sort_by { rand max }
      when :alpha, :sorted then
        methods.sort
      else
        raise "Unknown test_order: #{self.test_order.inspect}"
      end
    end
    

    You can reorder test any suitable way around. If you define your special ordered tests with

    test 'some special ordered test' do 
    end
    

    , don't forget to remove them from the results of super call.

    In my example I need to be sure only in one particular test to run last, so I keep random order on whole suite and place 'run_last' at the end of it.

    0 讨论(0)
提交回复
热议问题