【问题标题】:Testing pure Ruby bin/my_app.rb application with RSpec?使用 RSpec 测试纯 Ruby bin/my_app.rb 应用程序?
【发布时间】:2011-08-31 19:09:44
【问题描述】:

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

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

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

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

有什么建议/想法/建议吗?这是驱动命令行 Ruby 脚本行为的正常测试策略吗?

提前致谢。

【问题讨论】:

    标签: ruby testing cucumber bdd rspec2


    【解决方案1】:

    不确定我是否完全理解您的要求,但我想说,如果您想使用 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 中的一行

    希望对您有所帮助。 布兰登

    【讨论】:

    • 糟糕!你是对的。两者都应该工作...感谢您的注意。
    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    相关资源
    最近更新 更多