【发布时间】:2016-08-29 20:57:13
【问题描述】:
有人告诉我,使用 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) 里面的变量。但在这里感觉他们只是盲目地遵循博客文章中某处的短语“使用 let 助手而不是之前的块”。
非常感谢!
【问题讨论】:
-
就我而言,让我们懒惰地评估。即使没有被引用,一个 before 也会创建所有的记录。使用 let 定义的变量只有在稍后在测试中使用时才会被评估
-
@theDrifter "关闭为重复" :)
-
@Ven 并不是真的这是完全不同的问题。 我说的是
let!我知道 let 之间的区别,以及为什么要使用它而不是之前。这就是重点。我不明白定义let!(:abcd) { Model.create() }评估代码的意义。它会创建记录,但以后不会真正调用abcd。我的意思是你可以在街区内以同样的运气做到这一点。完全没有区别,只是第二个例子更清晰、更合乎逻辑。
标签: ruby-on-rails ruby unit-testing rspec