在我的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
定义 name1
的确切名称值 :car2
. 上面的语法引发了以下错误
NameError:
undefined local variable or method `name1' for #<RSpec::
如何在 :car2
中使用 name1
的精确值?有任何想法吗..
3 回答
所以
name1
现在也是一个惰性变量,在被调用时初始化,如果不是car1,那么对于car2 .如果Time.now有问题,可以将name1的值保留为
testcase['Car']
,然后只插入Time.now的值 .name1
是定义为car1
的哈希中的键,因此您需要使用哈希语法来获取其值:请注意,这只回答了关于如何提取值的问题,我不建议编写类似的规范 . 如果两辆车的名称相同,那么塞巴斯蒂安的回答可能更清晰,更容易理解 .
让定义相互配合 .
你定义了两件事:
car1
和car2
. 代码抛出了关于name1
的错误 . 你刚刚没有定义它 .我想你需要阅读更多关于ruby Hash和Symbol的信息 .