我定义了一个"私人的";我的一个模型中的异常类(因为这是一个实现细节(如下:
class User < ApplicationRecord
class InvalidStateException < StandardError
def initialize(msg = "Invalid State")
super(msg)
end
end
private_constant :InvalidStateException
end
在我的测试中,我想检查是否出现了这样的异常:
test "should not follow themselves" do
joao = users(:joao)
assert_not joao.following?(joao)
assert_raise(User::InvalidStateException) { joao.follow(joao) }
assert_not joao.following?(joao)
end
但正如预期的那样,一旦我试图在测试中引用一个私有常数,就会引发一个NameError:
test_should_not_follow_themselves#RelationshipTest (1.92s)
NameError: NameError: private constant #<Class:0x00005570b89cba48>::InvalidStateException referenced
那么,我该如何让Exception私有化并对其进行测试呢?
你所做的对我来说似乎违背直觉,但我该评判谁。
ruby中没有任何东西是真正私人的,你可以获得你的"私人的";使用.const_get
的常数
User.const_get(:InvalidStateException)