在我的RSpec测试中,我使用let()语法定义了多种方法。我遇到了一种情况,我需要在一个let语句内使用定义的变量,将其用作同一describe块内的另一个let语句。
git add -A
warning: adding embedded git repository: Part Project Manager
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint: git submodule add <url> Part Project Manager
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint: git rm --cached Part Project Manager
hint:
hint: See "git help submodule" for more information.
如您所见,我想使用 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
内name1
内:car1
内定义的name2
的确切名称值。上面的语法使我产生以下错误
:car2
如何在NameError:
undefined local variable or method `name1' for #<RSpec::
中使用name1
的确切值?任何想法。
答案 0 :(得分:3)
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的值。
答案 1 :(得分:2)
name1
是定义为car1
的哈希中的键,因此您需要使用哈希语法来获取其值:
let(:car1) do
{
name1: "#{testcase['Car']}_#{Time.now.round}",
car_model: testcase['Toyota']
}
end
let(:car2) do
{
name2: car[:name1]
}
end
请注意,这仅回答您有关如何提取值的问题,我不建议编写此类规范。如果两辆车都应使用相同的名称,那么塞巴斯蒂安的答案可能更清晰,更容易理解。
答案 2 :(得分:0)