Let’s say you have two shared_context blocks in your rspec spec that each redefines the same variable or mocks the same method:
shared_context "successful connect" do
before(:each) do
allow(ConnectServer).to receive(:connected?) { true }
end
...
end
shared_context "failed connect" do
before(:each) do
allow(ConnectServer).to receive(:connected?) { false }
end
...
end
You would expect that including them directly in a parent context would work:
context "current user is provider" do before do login provider end include_context "successful connect" include_context "failed connect" end
Well it doesn’t. Due to how rspec (~3.5) is implemented, the two mocks of connected? method overwrite each other, making one of them fail. To avoid that, you have to put each shared_context block in a wrapping context:
context "current user is provider" do
before do
login provider
end
context "connection succesful" do
include_context "successful connect"
end
context "connection failed" do
include_context "failed connect"
end
end