ruby - Rspec:模拟嵌套/依赖注入(inject)对象

标签 ruby dependency-injection rspec mocking

我在模拟注入(inject)对象时遇到问题。例如:

class Foo
  def initialize(bar = Bar.new)
    @bar = bar
  end

  def run
    @bar.do_something_cool
  end
end

# Rspec
describe Foo do
  it "should do something cool" do
    mock_bar = mock("bar")
    mock_bar.stub(:do_something_cool).and_return(nil)

    real_foo = Foo.new(mock_bar)
    real_foo.run

    mock_bar.should_receive(:do_something_cool).once
  end
end

如果我运行它,规范会失败,因为它说“do_something_cool”从未被调用。

 expected: 1 time
 received: 0 times

但是,如果我不 stub “do_something_cool”,我会收到以下错误

Mock "bar" received unexpected message :do_something_cool with (no args)

有什么想法吗?

最佳答案

mock_bar.should_receive(:do_something_cool).once 

应该早于

real_foo.run

关于ruby - Rspec:模拟嵌套/依赖注入(inject)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405396/

相关文章:

ruby - 在 SUSE 上找不到 Ruby 的头文件?

ruby - 如何从模块或类继承默认数据

ruby - HTML 电子邮件模板中的 Sinatra 变量

ruby-on-rails - 使用已经声明的 Rails 模型

c# - 在根部构建带参数的依赖链

ruby-on-rails - Rspec 测试比较<=>

ruby-on-rails - 带有 redirect_to 的 Flash 通知在 rails 中被破坏

oop - 如何理解松耦合应用程序的整体情况?

ruby-on-rails-3 - Rails 3 - 通过 rspec 正确测试 PUT 方法

ruby-on-rails-3 - Rails/Rspec View : The right way to test partials