在Rspec测试中,我希望出现错误。但是,我还希望代码在出现错误之前做出(或不做出)某些更改。
我有这样的事情:
std:string KeyStr = "-#NOT#";
std::string SomeStr = "this is the string i want to extract-#NOT#";
std::string::size_type index = SomeStr.find(KeyStr);
if (index == std::string::npos) ...
std::string extracted = SomeStr.substr(0, index);
这过去了。但是,当我这样做时:
it 'raises a VeryBad::NotCool error' do
expect { instance.err! }.to raise_error(VeryBad::NotCool)
end
这失败了,因为
it 'changes the instance status' do
expect{ instance.err! }.to change{ instance.name }
.from('nice instance').to('erroring instamce')
end
失败是有道理的。 但是,另一方面,我认为能够在出现错误之前检查是否发生了更改也很有用,因为代码可能是这样的:
Failure/Error: raise VeryBad::NotCool
即使测试期间出现(预期)错误,如何检查更改是否发生?
答案 0 :(得分:3)
it 'raises a VeryBad::NotCool error' do
expect(instance.name).to eq 'old_value'
expect { instance.err! }.to raise_error(VeryBad::NotCool)
expect(instance.reload.name).to eq 'erroring instance'
end