Jim*_*ler 5 ruby testing bdd cucumber rspec2
我有一个用纯Ruby编写的命令行(NON-RAILS)应用程序,我正在通过Cucumber和RSpec进行开发。它遵循lib,bin,spec和feature目录的典型应用程序层次结构。
到目前为止,我遵循的传统过程是编写失败的Cucumber功能/方案,然后放到RSpec驱除支持的lib文件,然后使方案通过。
不幸的是,在淘汰“ bin / my_application.rb”中的主应用程序入口点时,这似乎并不那么简单。对我而言,主要问题是我没有在RSpec中描述类,而是一种顺序的Ruby脚本,用于通过命令行参数和选项管理应用程序的类和初始化。
“ bin / my_application.rb”只是一个由外壳程序执行的小型包装程序,用于解析命令行选项并将它们作为初始化程序选项传递给我的主应用程序类。我仍然想测试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)
Run Code Online (Sandbox Code Playgroud)
只需将其混合起来,使其成为适合测试的类即可。
# 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 Code Online (Sandbox Code Playgroud)
现在您唯一没有测试的是run
命令上的默认参数和文件中的一行my_application.rb
希望有帮助。布兰登