我被告知使用let!()
代替before(:each)
阻止是有意义的。但是,我没有看到这样做的逻辑。在下面的例子中做出类似的事情是否真的有意义:
context 'my super context' do
let!(:something) do
Model.create(subject: "Hello", body: "World")
end
it '...' do
# We never call something
# All we want is just to evaluate and create the record
end
end
请注意,您根本不会在示例中的任何位置拨打something
。从技术上讲,我并没有看到它和它之间有太大的区别,除非它实际上更严格,更容易理解,没有文档就像普通的英语:
context 'my super context' do
before(:each) do
Model.create(subject: "Hello", body: "World")
end
it '...' do
# We never call something
# All we want is just evaluate and create the record
end
end
有人可以帮我理解我给出的规则背后的想法吗?
我可以理解为什么你会使用let
而不是before(:all)
和before(:each)
将变量放在里面。但在这里,只是觉得他们只是盲目地遵循博客文章中某处找到的“使用一个让帮手而不是前一块”的短语。
非常感谢!
答案 0 :(得分:2)
不,始终使用let!
而不是before
阻止不是最佳做法。你是对的:
let!
。before
。 (使用let!
会误导读者认为其价值正在被使用。)请注意,在任何情况下都应谨慎使用let!
和before
块。它们会增加以后的测试编写者在同一个块中添加测试的风险,这些测试不需要let!
或before
的结果,这使得这些测试更难以理解和更慢。