Ruby rspec-before:each和before:all的语法是什么!让
我什么时候可以使用let或let!那么我如何引用测试中的变量呢Ruby rspec-before:each和before:all的语法是什么!让,ruby,rspec,let,Ruby,Rspec,Let,我什么时候可以使用let或let!那么我如何引用测试中的变量呢 let和let的用法如何!与使用before:each和before:all相比?使用before:each和before:all的“经典”方式是 然后,通过在测试中使用@符号来引用实例变量,即 describe "tests" do before :each do @var1='a' @var2='b' end it "does stuff" do a=some_class.some_meth
let和let的用法如何!与使用before:each和before:all相比?使用before:each和before:all的“经典”方式是 然后,通过在测试中使用@符号来引用实例变量,即
describe "tests" do
before :each do
@var1='a'
@var2='b'
end
it "does stuff" do
a=some_class.some_method(@var1)
expect(a).to eq @var2
end
end
如果希望变量在每次测试中具有相同的值,则可以在之前使用:all。
如果您希望一个变量在每次测试使用之前生成相同的值:each。
一般使用前:每次使用不当前:都会太容易导致间歇性测试失败。
把所有这些都看作是定义常数
让/让!格式如下所示:
describe "tests" do
let(:var1) {'a'}
let!(:var2) {srand(25)}
it "does stuff" do
a=some_class.some_method(var1)
expect(a).to eq var2
end
end
注意以下几点:
var1和var2现在看起来像局部变量,即在测试和设置中使用var1而不是@var1。实际上,它们是测试类方法。使用时需要注意的重要一点是,在随后使用@符号时不要使用@符号,这与您使用的before:each和before:all不同。
在let’s示例的第一种情况下,let与var1一起使用。这使得跨示例的备忘录能够工作。在第二种情况下,让我们来看看!与var2一起使用。这是必需的,因为您希望在每次使用之前显式地调用/设置变量方法。srand是一个很好的例子,说明您何时需要它,因为它为随机数生成器播种,但仅用于rand的下一次使用,因此如果在多个测试示例中使用它,则每次都需要重置它。
加上我的两分钱。我更喜欢离开:每一个都不是我正常的before语句。它看起来更干净。然后加上:所有在关闭的机会,我做了一个前:所有块。另一个有趣的发现是,您可以在主题行中模拟let范式,本质上是命名嵌套的主题主题:调用_some_method{some_class.some_methodvar1},因此it块是单行,读起来非常好。let和let都是!每次都要重新评估,这样无论使用哪一个,您的随机数每次都会不同。区别在于它们的初始化时间。允许在所有示例之前进行初始化-即使示例未使用它。让我们在第一次使用示例时对其进行初始化。
describe "tests" do
let(:var1) {'a'}
let!(:var2) {srand(25)}
it "does stuff" do
a=some_class.some_method(var1)
expect(a).to eq var2
end
end