我什么时候可以使用let或let!那我怎么能在测试中引用变量呢?
如何使用let和let!与之前使用相比:每个和之前:所有?
答案 0 :(得分:0)
经典'使用before(:each)
和before(:all)
的方式是
describe "tests" do
before :each do
@var1='a'
@var2='b'
end
end
然后通过在测试中加上@
符号来引用实例变量,即
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
如果您希望变量在每个测试中具有相同的值,则可以使用before :all
如果您希望变量为每个测试使用before :each
生成相同的值
通常使用before :each
因为before :all
的不当使用很容易导致间歇性的测试失败
将before :all
视为定义常量。
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
注意几件事:
var1
和var2
现在看起来像局部变量,即在测试和设置中使用var1
而不是 @var1
。实际上它们是测试类方法。需要注意的重要一点是, NOT 使用@
符号时,请使用:each
符号,而不是之前的before :all
和let
。< / LI>
let
示例的第一种情况下,var1
与let!
一起使用。这样可以使跨例子的记忆起作用。在第二种情况下,var2
与srand()
一起使用。这是必需的,因为您希望在每次使用之前显式调用/设置变量(方法)。 rand()
是一个很好的例子,当你需要它时,因为它为随机数生成器播种,但仅用于{{1}}的下一次使用,因此如果在多个测试示例中使用它,则每次都需要重置它。 / LI>
醇>