在rspec中的上下文内部循环无法正确设置let变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在rspec中的上下文内部循环无法正确设置let变量相关的知识,希望对你有一定的参考价值。
MY_HASH =
user_id: [:email, :first_name],
email: [:last_name]
context "when object's single attribute changed" do
let(:object) double("my_object", :changed? => true)
before do
allow(object).to receive("#attribute_changed?").and_return(true)
end
after do
allow(object).to receive("#attribute_changed?").and_return(false)
end
MY_HASH.each do |attr, dependent_attrs|
let(:attribute) attr
it "should have all dependent attributes in right order for defaulting attribute" do
expect(subject.send(:my_method)).to eq(dependent_attrs)
end
end
end
此处的属性始终被评估为email
。我想一个个地遍历每个属性。
任何人都可以帮助我了解这里出了什么问题吗?
谢谢,
答案
这是因为您正在重新定义每个循环的attribute
:
MY_HASH.each do |attr, dependent_attrs|
let(:attribute) attr
要解决此问题,您可以为每次迭代引入一个新的上下文/描述块:
MY_HASH.each do |attr, dependent_attrs|
describe("#attr") do
let(:attribute) attr
it "should have all dependent attributes ..." do
# content of test here
end
end
end
以上是关于在rspec中的上下文内部循环无法正确设置let变量的主要内容,如果未能解决你的问题,请参考以下文章
即使在设置 EnableDelayedExpansion [重复] 之后,也无法在批处理文件中的 for 循环内设置变量值