期待Rspec中的错误和其他状态

时间:2018-03-13 01:55:05

标签: ruby-on-rails ruby testing rspec

在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

即使测试期间出现(预期)错误,如何检查更改是否发生?

1 个答案:

答案 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