在Rails Minitests中调用def setup
和setup 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 setup
和setup do
之间的实际差异的太多信息,但是一个blog(您必须说我的话,因为它是用日语写的)写道,setup do
不仅会调用该类的设置过程,还会调用它的设置过程。父类,这也许可以解释为什么我的测试使用setup do
起作用(也许两个setup
都称为FooTest
)。
关于ruby-on-rails - Minitest中 "def setup"和 "setup do"之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57489057/