gpt4 book ai didi

RSpec:方法内外部对象的 stub 方法调用

转载 作者:行者123 更新时间:2023-12-02 18:13:37 25 4
gpt4 key购买 nike

我正在尝试在方法中 stub 方法的行为:

class A
def method_one(an_argument)
begin
external_obj = ExternalThing.new
result = external_obj.ext_method(an_argument)
rescue Exception => e
logger.info(e.message)
end
end
end

规范:

it "should raise an Exception when passed a bad argument" do
a = A.new
external_mock = mock('external_obj')
external_mock.stub(:ext_method).and_raise(Exception)
expect { a.method_one("bad") }.to raise_exception
end

但是,永远不会引发异常。

我也尝试过:

it "should raise an Exception when passed a bad argument" do
a = A.new
a.stub(:ext_method).and_raise(Exception)
expect { a.method_one("bad") }.to raise_exception
end

这也不起作用。在这种情况下,如何正确地 stub 外部方法以强制异常?

预先感谢您的任何想法!

最佳答案

您必须 stub ExternalThing 的类方法 new 并使其返回模拟:

it "should raise an Exception when passed a bad argument" do
a = A.new
external_obj = mock('external_obj')
ExternalThing.stub(:new) { external_obj }
external_obj.should_receive(:ext_method).and_raise(Exception)
expect { a.method_one("bad") }.to raise_exception
end

请注意,此解决方案在 rspec 3 中已弃用。有关 rspec 3 中未弃用的解决方案,请参阅 rspec 3 - stub a class method .

关于RSpec:方法内外部对象的 stub 方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12149228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com