Rspec - 在另一个 let 语句中使用一个 let 语句中定义的变量
Rspec - Using variable defined in a let statement in another let statement
在我的 RSpec 测试中,我使用 let() 语法定义了多个方法。我遇到过这样一种情况,我需要将 let 语句中定义的变量用于同一个 describe 块中的另一个 let 语句。
context 'Reuse the name of first car in the second car' do
it_behaves_like 'some car test' do
let(:car1) do {
name1: "#{testcase['Car']}_#{Time.now.round}",
car_model: testcase['Toyota']
}
end
let(:car2) do {
name2: name1
}
end
end
end
如您所见,我想使用我在 :car1
中为 name2
在 :car2
中定义的 name1
的确切名称值。上面的语法抛出以下错误
NameError:
undefined local variable or method `name1' for #<RSpec::
如何在 :car2
中使用 name1
的精确值?任何想法..
let(:name1) { "#{testcase['Car']}_#{Time.now.round}" }
let(:car1) { { name1: name1, car_model: testcase['Toyota'] } }
let(:car2) { { name2: name1 } }
所以name1
现在也是一个惰性变量,在调用时初始化,如果不是car1,那么car2。
如果 Time.now 有问题,您可以将 name1 的值保留为 testcase['Car']
,然后仅插入 Time.now.
的值
name1
是散列中定义为 car1
的键,因此您需要使用散列语法来获取其值:
let(:car1) do
{
name1: "#{testcase['Car']}_#{Time.now.round}",
car_model: testcase['Toyota']
}
end
let(:car2) do
{
name2: car[:name1]
}
end
请注意,这仅回答了您关于如何提取值的问题,我不建议您那样编写规范。如果两辆车同名,那么塞巴斯蒂安的答案可能更清晰易懂。
让定义相互配合得很好。
您定义了两个东西:car1
和 car2
。
代码抛出关于 name1
的错误。你只是没有定义它。
在我的 RSpec 测试中,我使用 let() 语法定义了多个方法。我遇到过这样一种情况,我需要将 let 语句中定义的变量用于同一个 describe 块中的另一个 let 语句。
context 'Reuse the name of first car in the second car' do
it_behaves_like 'some car test' do
let(:car1) do {
name1: "#{testcase['Car']}_#{Time.now.round}",
car_model: testcase['Toyota']
}
end
let(:car2) do {
name2: name1
}
end
end
end
如您所见,我想使用我在 :car1
中为 name2
在 :car2
中定义的 name1
的确切名称值。上面的语法抛出以下错误
NameError:
undefined local variable or method `name1' for #<RSpec::
如何在 :car2
中使用 name1
的精确值?任何想法..
let(:name1) { "#{testcase['Car']}_#{Time.now.round}" }
let(:car1) { { name1: name1, car_model: testcase['Toyota'] } }
let(:car2) { { name2: name1 } }
所以name1
现在也是一个惰性变量,在调用时初始化,如果不是car1,那么car2。
如果 Time.now 有问题,您可以将 name1 的值保留为 testcase['Car']
,然后仅插入 Time.now.
name1
是散列中定义为 car1
的键,因此您需要使用散列语法来获取其值:
let(:car1) do
{
name1: "#{testcase['Car']}_#{Time.now.round}",
car_model: testcase['Toyota']
}
end
let(:car2) do
{
name2: car[:name1]
}
end
请注意,这仅回答了您关于如何提取值的问题,我不建议您那样编写规范。如果两辆车同名,那么塞巴斯蒂安的答案可能更清晰易懂。
让定义相互配合得很好。
您定义了两个东西:car1
和 car2
。
代码抛出关于 name1
的错误。你只是没有定义它。