0

RSpec 文档展示了如何模拟类方法。我该如何替换实例方法。这是一个代码示例,rspec-mocks用于使其更具体:

require 'rspec'

class Foo
  def foo
    "foo"
  end

  def foobar
    foo + "bar"
  end
end

RSpec.describe "Foo" do
  it "mocks foo" do
    allow(Foo).to receive(:foo).and_return("bar")
    foo = Foo.new
    expect(foo.foobar).to eq("barbar")
  end
end

这给出了“Foo 没有实现:foo”。当然,这是为了简化而设计的。在我正在测试的实际类中,foo发出一个 HTTP 请求,所以我想在为foobar. 我想用 来做这件事rspec-mocks,但如果另一个宝石可以在这里提供帮助,我也愿意接受。

4

1 回答 1

1

只需在实例而不是类上存根方法:

RSpec.describe "Foo" do
  it "mocks foo" do
    foo = Foo.new
    allow(foo).to receive(:foo).and_return("bar")
    expect(foo.foobar).to eq("barbar")
  end
end
于 2022-03-02T23:23:55.900 回答