rspec 中是否有"not"等价物,例如逻辑不是"and_return"



在rspec文档中找不到该方法,但有其他方法吗?

allow_any_instance_of(<some connection>).to receive(<post method>).and_return(200)

上述代码块到而不是返回200而不是

您从根本上误解了allow_any_instance_ofto_return的作用。

allow_any_instance_of用于在给定类的任何实例上存根方法。它没有设定任何期望值——expect_any_instance_of设定了。

class Foo
def bar(*args)
"baz"
end
end
RSpec.describe Foo do
describe "allow_any_instance_of" do
it "does not create an expectation" do
allow_any_instance_of(Foo).to receive(:bar).and_call_original
expect(true).to be_truthy
end
end
describe "expect_any_instance_of" do
it "sets an expectation" do
expect_any_instance_of(Foo).to receive(:bar).and_call_original
expect(Foo.new.bar).to eq 'baz'
end
# this example will fail
it "fails if expected call is not sent" do
expect_any_instance_of(Foo).to receive(:bar).and_call_original
expect(true).to be_truthy
end
end
end

.and_return用于设置mock/stub的返回值。它并不像你所认为的那样对回报值设定期望。

RSpec.describe Foo do
describe "and_return" do
it "changes the return value" do
allow_any_instance_of(Foo).to receive(:bar).and_return('hello world')
expect(Foo.new.bar).to_not eq 'baz'
expect(Foo.new.bar).to eq 'hello world'
end
end
end

当您希望监视方法而不更改其返回值时,可以使用.and_call_original。默认情况下,任何使用allow_any_instance_of/expect_any_instance存根的方法都将返回nil。

AFAIK不可能对.and_call_original的返回值设置期望值。这也是any_instance_of被认为是代码气味的原因之一,应该避免。

相关内容

  • 没有找到相关文章

最新更新