使用RSpec测试纯Ruby bin / my_app.rb应用程序?

时间:2011-08-31 19:09:44

标签: ruby testing cucumber bdd rspec2

我有一个用纯Ruby编写的命令行(NON-RAILS)应用程序,我通过Cucumber和RSpec驱逐出去。它遵循lib,bin,spec和feature目录的典型应用程序层次结构。

到目前为止,我一直遵循编写失败的Cucumber功能/场景的传统过程,下载到RSpec以驱逐支持的lib文件,然后让场景通过。

不幸的是,当驱逐出“bin / my_application.rb”中的主应用程序入口点时,这似乎并不那么直接。对我来说主要的问题是我没有在RSpec中描述一个类,它是一个顺序的Ruby脚本,用于管理应用程序的类和通过命令行参数和选项进行初始化。

“bin / my_application.rb”只是一个小的shell执行包装器,用于解析命令行选项并将它们作为初始化程序选项传递给我的主应用程序类。我仍然想测试bin脚本的行为(例如MyApp.should_receive(option_a).with(parameter))。

有任何建议/意见/建议吗?这是驱逐命令行Ruby脚本行为的正常测试策略吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

我不确定我完全理解你在问什么,但我会说如果你想使用RSpec来测试你的参数传递它应该很容易做到。假设你有你的包装脚本:

# my_application.rb
command = Command.new
command.foo = true if ARGV[0]
command.bar = true if ARGV[1]
command.baz = false if ARGV[2]

command.make_dollars(1000000)

只需将其混合并使其成为适合测试的类。

# command_runner.rb
class CommandRunner
  def run(args, command = Command.new)
    command.foo = true if args[0]
    command.bar = true if args[1]
    command.baz = false if args[2]

    command.make_dollars(1000000)
  end
end

# my_application.rb
CommandRunner.new.run(ARGV)

现在你唯一没有经过测试的是run命令的默认参数和文件my_application.rb中的一行

希望有所帮助。 布兰登