我有一个用纯 Ruby 编写的命令行(非 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 脚本行为的正常测试策略吗?
提前致谢。
最佳答案
不确定我是否完全理解您的要求,但我想说的是,如果您想使用 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
希望对您有所帮助。 布兰登
关于ruby - 使用 RSpec 测试纯 Ruby bin/my_app.rb 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7262127/