代码如下:
def index
@car_types = car_brand.car_types
end
def car_brand
CarBrand.find(params[:car_brand_id])
rescue ActiveRecord::RecordNotFound
raise Errors::CarBrandNotFound.new
end
我想通过RSpec测试它。我的代码是:
it 'raises CarBrandNotFound exception' do
get :index, car_brand_id: 0
expect(response).to raise_error(Errors::CarBrandNotFound)
end
ID等于0的CarBrand不存在,因此我的控制器代码引发Errors::CarBrandNotFound,但我的测试代码告诉我没有引发任何内容。我如何修复它?我错了什么?
4条答案
按热度按时间ni65a41a1#
使用
expect{}
代替expect()
。示例:
pb3s4cty2#
为了规范错误处理,您的期望需要设置在一个块上;计算对象不会引发错误。
所以你想做这样的事情:
我有点惊讶,你没有得到任何异常冒泡到你的规格结果,虽然。
ztigrdn83#
get :index
永远不会引发异常--它会像真实的的服务器一样将response设置为500错误。尝试:
cuxqih214#
如果您想测试异常沿着附带的消息,您还可以执行类似以下的操作: