如何使用 Rspec 存根 method_options?

问题描述 投票:0回答:2
Class CLI < Thor
  desc "run [age]" "user passes age"
  method_option :age,type:'numeric'
  def run
    variable=options[:a] if options[:a].present?
    call_method(a)
  end
end

如果我想测试以下行,如何使用 Rspec 来模拟

options[:a]

variable=options[:a] if options[:a].present?

另外,如何测试局部变量是否更新了?

ruby rspec command-line-interface thor
2个回答
0
投票

你可以嘲笑“选项”

  let(:cli) { CLI.new }
  allow(cli).to receive(:options){ { a:2 } }

0
投票

这里建议的解决方案或其他问题都不适合我,但我在这里找到了解决方案: https://github.com/brianokeefe/blog/blob/master/2014-05-31-testing-thor-command-lines-with-rspec.md#handling-input

所以你会像这样进行测试:

subject(:cli) { CLI.new }
it "should work" do
  cli.options = {:age => 2}
  expect { cli.run }.to ...
end
© www.soinside.com 2019 - 2024. All rights reserved.