【问题标题】:Any way to test that a method starts pry?有什么方法可以测试一个方法是否开始撬?
【发布时间】:2018-06-07 00:06:37
【问题描述】:

我正在构建一个 gem,它允许为 ruby​​ gem 开发提供比当前选项更方便和可配置的“控制台”(即:“捆绑控制台”)。

因此,整个 gem 最重要​​的方面之一是它实际上打开了一个控制台会话,我目前已经在 start 方法中设置了它:

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

我正在尝试测试此功能,但这很困难,因为他们没有很多好的资源。这也很烦人,因为每次我在 rspec 中运行此方法时,pry 都会打开,我必须在完成其余测试之前退出它。

我有三个主要问题:

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

【问题讨论】:

    标签: ruby rspec pry


    【解决方案1】:

    执行此操作的最佳方法可能是使用 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
    

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

    【讨论】:

    • 我能够通过一些小的调整来完成这项工作,1)我必须将described_class.start 线移动到低于预期,2)我必须使用“接收”而不是“ have_received'expect(Pry).to receive(:start).with('your_args_here')
    • 一旦我这样做了,尽管它通过了我制定的所有三个规则!如果您做出我提到的更改,我会标记为正确的。
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 2016-11-20
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多