这是一个非常具体的问题。我在测试中使用lambdas,我有一个与此相似的案例:
RSpec.shared_examples "my behavior" do |my_lambda|
let!(:my_value) { 17 }
it "does sth" do
puts "my_value in my behavior:"
puts my_value
end
my_lambda.()
end
describe "my test" do
it_behaves_like "my behavior", -> {
it "does sth else" do
puts "my_value in my_lambda:"
puts my_value
end
}
end
运行该测试我得到错误,因为变量my_value
在我的lambda中不可见:
NameError:未定义的局部变量或方法`my_value'
如何在不违反DRY规则的情况下解决此问题?
我已经尝试过这个:
RSpec.shared_examples "my behavior" do |my_lambda|
lets = -> {
let!(:my_value) { 17 }
}
lets.()
it "does sth" do
puts "my_value in my behavior:"
puts my_value
end
my_lambda.(lets)
end
describe "my test" do
it_behaves_like "my behavior", -> lets {
lets.()
it "does sth else" do
puts "my_value in my_lambda:"
puts my_value
end
}
end
但它会引发同样的错误。