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

标签 ruby testing cucumber bdd rspec2

我有一个用纯 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/

相关文章:

javascript - Cypress Cucumber - 如何让我的步骤按顺序运行?

ruby-on-rails - 如何在 Slim 模板中渲染 HTML

ruby-on-rails - Ajax:成功无法在 Rails 应用程序中工作

ruby - 如何从 Ruby 中的特定相对路径加载文件?

php - 动态测试工具

javascript - nightwatch自定义命令的执行模型是什么,如何等待它们?

ruby-on-rails - 如何在 ruby​​ 1.9.3/Rails 3.2.1 中安装 ruby​​-debug

go - 如何简单测试文件的下载和上传?

cucumber - 在 Maverick 上安装 Cucumber 时出错

automation - 错误: Step implementation missing for the second feature file