如何解决在RSpec中重新分配实例变量
我需要按顺序运行一系列测试,因此,我需要保持所有规格的通用状态。根据对before context hooks的阅读,我认为我可以从示例内部重新分配实例变量。
似乎我不能重新分配它们,但是我可以对其进行修改。这是一个工作示例:
require "rspec/expectations"
RSpec.describe "Array",order: :defined do
before(:context) do
@array = []
end
describe "initialized in before(:context)" do
it "is empty" do
expect(@array.size).to eq(0) # Passes
end
it "accepts objects" do
@array << Object.new # Passes
end
it "shares state across examples" do
expect(@array.size).to eq(1) # Passes
end
it "can reassign the array" do
@array = [] # Passes,but this seems to only be assigned locally?
end
it "still shares state across examples" do
expect(@array.count).to eq(0) # => FAILURE: @array.count == 1
end
end
end
如何在上述示例中重新分配@array?
因此,为了清楚起见,我已经有了一种解决方法,该方法不涉及重新分配实例变量。贴在下面。 我不是在寻找解决方法。我想了解我是否可以完全重新分配实例变量,或者为什么不能重新分配。
# This passes with no issues
RSpec.describe "Array in a Struct",order: :defined do
before(:context) do
@o = OpenStruct.new
@o.array = []
end
describe "initialized in before(:context)" do
it "is empty" do
expect(@o.array.size).to eq(0) # Passes
end
it "accepts objects" do
@o.array << Object.new # Passes
end
it "shares state across examples" do
expect(@o.array.size).to eq(1) # Passes
end
it "can reassign the array" do
@o.array = [] # Passes
end
it "still shares state across examples" do
expect(@o.array.count).to eq(0) # Passes
end
end
end
解决方法
我不希望像这样的普通实例变量分配能够正常工作,但是您可以尝试使用Thread.current
作为存储空间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。