我想用 rspec 测试 thor 任务,但是从 rspec 调用它们时,我有两个要求:
- 我想有可用的 Thor 类实例
- 我想用默认选项调用任务(因为它将从命令行调用)
我无法同时实现这两个,请考虑以下代码:
require 'thor'
require 'thor/runner'
class App < Thor
method_option :foo , :default => "foovalue"
desc "xlist", "list"
def xlist(search="")
p options
end
end
app = App.new
app.xlist
app.invoke(:xlist)
App.start ARGV
输出是:
> ruby contrib/thor_test.rb xlist
{}
{}
{"foo"=>"foovalue"}
在前两个示例中,我可以通过实例调用任务,但默认选项不会传递给方法(这使得规范不切实际)
在第三个示例中,我获得了默认选项,但我无法对类实例设置期望值,也无法存根任何难以测试的方法。这是因为类实例是动态创建的。