有没有办法测试一个方法开始撬?

时间:2018-06-07 00:06:38

标签: ruby rspec pry

我正在构建一个宝石,它可以提供更方便,更可配置的控制台'对于ruby gem开发而言比当前选项(即:' bundle console')。

因此,如果不是整个gem最重要的一个方面就是它确实打开了一个控制台会话,我目前在start方法中设置了它:

class MyConsole 
  def start
    Pry.start(self)
  end
end

我正在尝试测试此功能,但这很难,因为他们的资源不是很多。它也非常烦人,因为每次我在rspec中运行这个方法时,pry都会打开,我必须在完成剩下的测试之前退出它。

我有三个主要问题:

  1. 如何在没有实际启动pry的情况下在rspec中运行启动pry的方法?
  2. 我如何具体测试该方法实际上是否开始撬?
  3. 假设1和2是可能的,我如何测试该方法开始撬动的上下文? (注意start方法如何调用Pry.start(self),这意味着pry会话应该在MyConsole实例的上下文中打开。)

1 个答案:

答案 0 :(得分:2)

最好的方法是使用RSpec spy

您的测试可能看起来像这样:

describe MyConsole do
  describe '#start' do
    it 'calls Pry.start' do
      described_class.start
      expect(Pry).to have_received(:start).with('your_args_here')
    end
  end
end

这是对RSOP存根选项IMO的一个非常好的解释,您可以在其中了解更多信息:https://about.futurelearn.com/blog/stubs-mocks-spies-rspec