我正在尝试使用main
gem来创建命令行实用程序。这是在最近的Ruby Rogues播客中提出的。
如果我将所有代码放在一个文件中并且需要该文件,那么rspec会给我一个错误,因为主dsl将rpsec视为主实用程序的命令行调用。
我可以将方法分解为新文件并让rspec需要该文件。假设你有这个程序,但是想把do_something
方法放在一个单独的文件中用rspec来测试:
require 'main'
def do_something(foo)
puts "foo is #{foo}"
end
Main {
argument('foo'){
required # this is the default
cast :int # value cast to Fixnum
validate{|foo| foo == 42} # raises error in failure case
description 'the foo param' # shown in --help
}
do_something(arguments['foo'].value)
}
使用多个文件分发/部署ruby命令行程序的便捷方法是什么?也许创造一个宝石?
答案 0 :(得分:1)
您正在进行正确的测试 - 基本上您希望将“逻辑”放在单独的文件中,以便对其进行单元测试。然后,您可以使用Aruba之类的东西进行集成测试。
对于多个文件,最好的办法是将其作为RubyGem分发。那里有很多资源,但它的要点是:
bin
lib/YOUR_APP/whatever.rb
中,其中“YOUR_APP”是您应用的名称。我还建议使用为您的应用命名的模块命名您的类的名称lib
中的文件,好像lib
位于加载路径中bundle gem
生成它并使用git,你应该很高兴去)这样,您的应用程序可以在运行时访问lib
中的文件,使用RubyGems 时可以访问。在开发过程中,您需要执行bundle exec bin/my_app
或RUBYLIB=lib bin/my_app
。重点是,RubyGems在运行时处理加载路径,但不在开发时处理。