【问题标题】:How to use instance_spy to debug unit test如何使用 instance_spy 调试单元测试
【发布时间】:2015-12-21 07:18:03
【问题描述】:

我有一个单元测试,我正在尝试调试以下内容:

describe "#issue!" do
  it "delegates to task#issue" do
    t = instance_spy("Task")
    expect(t).to receive(:issue).with(type: 'create_task')
  end
end

它击中的方法来自这个:

def issue!
  t = object.tasks.new
  t.issue(type: 'create_task')
  t
end

当我运行 rspec 时,我收到以下消息:

失败/错误:expect(t).to receive(:issue).with(type: 'create_task') (InstanceDouble(Task) (匿名)).issue({:type=>"create_task"}) 预期:1 次带参数:({:type=>"create_task"}) 收到:0次

基本上,我想知道 instance_spy 是如何工作的?它是创建一个绕过验证而不将其保存到数据库的新对象,类似于使用 .new 还是将其保存到数据库而不经过验证 (.create!(validate: false))?一段时间以来一直在尝试解决此错误。

【问题讨论】:

    标签: ruby-on-rails unit-testing rspec


    【解决方案1】:

    在您的规范中,您实际上从未在expect 之后调用任何会调用issue! 的东西。请记住,在规范之后,任何间谍和模拟都将被卸载。

    除此之外,instance_double 创建了一个类似于指定类的新虚拟对象,可以在其上调用原始类的实例中存在的相同方法。

    它被称为verifying double,也记录在documentation of rspec-mocks中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-19
      • 2013-05-08
      • 2015-08-25
      • 2021-10-02
      • 2015-10-17
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      相关资源
      最近更新 更多