本文介绍了Rspec:如何测试在私有方法中引发的异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在私有方法中测试异常时出错.如何测试从公共方法调用的私有方法中引发的异常?
Getting error while testing an exception in a private method. How to test an exception is raised in private method which is called from a public method?
公开
def public_method
private_method
end
私人
def private_method
tries = 0
begin
raise Product::StaleObjectError.new("Product is changed while you were editing") if stale_object?
// Do some work
raise Exception.new("Total amount used is greater than approved") if total_approved < 0
// Save Product
rescue Product::StaleObjectError => e
if tries < MAX_RETRIES
tries += 1
sleep(1 + tries)
reload
retry
else
raise Product::StaleObjectError("Product is changed while you were editing")
end
end
attributes
end
测试用例:
before(:each) do
@prod_v1 = Product.new
end
it 'if product stale, then an exception should raise' do
Product.any_instance.stub(:stale_object?).and_return(true)
expect_any_instance_of(Product).to receive(:private_method).and_raise(Product::StaleObjectError.new("Product is changed while you were editing"), nil)
@prod_v1.public_method
end
测试用例出现以下错误
Failure/Error: @product_v1.private_method
Product::StaleObjectError:
Product is changed while you were editing
# ./app/models/product.rb:10:in `private_method'
# ./spec/models/product_spec.rb:67:in `block (4 levels) in <top (required)>'
我尝试更改测试用例的结构,但仍然出错.
I tried the change the structure of the test case, but still get errors.
it 'if product stale, then an exception should raise' do
Product.any_instance.stub(:stale_object?).and_return(true)
expect_any_instance_of(Product).to receive(:private_method).and_raise(Product::StaleObjectError.new(nil, nil))
@prod_v1.public_method
end
错误
Failure/Error: expect_any_instance_of(Product).to receive(:private_method).and_raise(Product::StaleObjectError.new(nil, nil))
ArgumentError:
wrong number of arguments (2 for 0..1)
推荐答案
try and_raise(Product::StaleObjectError.new(nil, nil))
看到这个问题我问了一段时间关于同样的问题:
see this question i asked a while about the same issue:
这篇关于Rspec:如何测试在私有方法中引发的异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!