免责声明:总的来说,我对 RSpec 和 TDD 很陌生,所以我可能会以完全错误的方式解决这个问题。
我想为我的程序编写一个命令行界面,它接受一个命令并生成一个类来处理它。该程序的工作方式类似于 git 和 svn 等工具;即你可以传递“srs init”来初始化程序,“srs add”来添加一些东西,等等。
所以我有一个类,它接受 ARGV 并将其传递给特定的处理程序,如下所示:
class CLI
def run!(*arguments)
command = arguments.shift
case command
when "init"
CLI::Init.new.run!(*arguments)
end
end
end
我的 Init 处理程序将如下所示:
class CLI
class Init
def initialize()
end
def run!(*arguments)
end
end
end
我正在尝试为 CLI 类的路由功能编写一个测试套件。如果我使用以下内容,RSpec 会失败:
describe CLI do
it "should launch the Init handler if we pass init" do
CLI::Init.any_instance.should_receive(:run!)
CLI::run!(*["init"])
end
end
但是,如果我将调用替换为CLI::run!
直接调用 Init 处理程序的运行,它就会通过;IE:-
describe CLI do
it "should launch the Init handler if we pass init" do
CLI::Init.any_instance.should_receive(:run!)
CLI::Init.new.run!(*[])
end
end
看起来 any_instance 似乎只适用于在describe
块内定义/构造的实例,但我不太确定。如果有人可以为我提供任何指导,无论是我如何检查在我的run!
函数内部构造的实例上是否调用了类方法,或者首先测试此功能的更好方法,我将不胜感激。