Minitest中“ def setup”和“ setup do”之间的区别?

时间:2019-08-14 06:17:23

标签: ruby-on-rails ruby minitest

在Rails Minitests中调用def setupsetup do之间有什么区别吗?我一直都在使用def setup,但是突然发现我的setup在特定测试文件中没有被调用。当我将其更改为setup do时,它突然又工作了(没有更改任何其他操作)。但是我觉得这很奇怪,如果可能的话,我宁愿坚持使用def setup来保持一致性。任何建议表示赞赏。

require 'test_helper'
require_relative '../../helpers/user_helper'

class FooTest < ActiveSupport::TestCase
  include UserHelper

  # This method doesn't get called as-is.
  # But it does get called if I change the below to `setup do`.
  def setup
    # create_three_users is a UserHelper method.
    create_three_users
    @test_user = User.first
  end


  test 'should abc' do
    # Trying to call @test_user here returned nil.
  end
end

1 个答案:

答案 0 :(得分:1)

还有另一个测试文件,其类别定义为class FooTest < ActiveSupport::TestCase。我想象有人通过复制原始FooTest文件创建了它,却忘记了更改名称。

简而言之,另一个FooTest的设置方法已被调用,而不是此方法。巧合的是,另一个FooTest也在设置中调用了相同的create_three_users,这就是为什么直到尝试并分配实例变量失败后我才意识到这一点的原因。

我找不到关于def setupsetup do之间的实际差异的太多信息,但是有一个blog(因为我用日语写的,所以我不得不承认) setup do不仅为该类还为其父类调用了设置过程,这可能解释了为什么我的测试使用setup do进行工作(也许对于{{1 }} s。