在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

最佳答案

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

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

我没有找到有关def setupsetup do之间的实际差异的太多信息,但是一个blog(您必须说我的话,因为它是用日语写的)写道,setup do不仅会调用该类的设置过程,还会调用它的设置过程。父类,这也许可以解释为什么我的测试使用setup do起作用(也许两个setup都称为FooTest)。

关于ruby-on-rails - Minitest中 "def setup"和 "setup do"之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57489057/

10-16 04:11