用 rspec-mock 替换实例方法
Replace instance method with rspec-mock
The RSpec documentation 展示了如何模拟 class 方法。我该如何替换实例方法。下面是一个代码示例,使用 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”。当然,这是为了简化而设计的。在我正在测试的实际 class 中,foo
发出 HTTP 请求,因此我想在为 foobar
编写规范时模拟它。我想用 rspec-mocks
来做这件事,但如果另一个 gem 可以提供帮助,我也愿意接受。
只需将方法存入实例而不是 class:
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
The RSpec documentation 展示了如何模拟 class 方法。我该如何替换实例方法。下面是一个代码示例,使用 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”。当然,这是为了简化而设计的。在我正在测试的实际 class 中,foo
发出 HTTP 请求,因此我想在为 foobar
编写规范时模拟它。我想用 rspec-mocks
来做这件事,但如果另一个 gem 可以提供帮助,我也愿意接受。
只需将方法存入实例而不是 class:
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