I just tried to integrate a simple test to check some options passed as
argument to a class to be executed:
[code]
require 'spec_helper'
module PropertyInjector
describe Options do
describe "#source folder option" do
it "sets up a source folder" do
argv = %w{-e path/to/some/folder}
puts "argv[0]: #{argv[0]}"
puts "argv[1]: #{argv[1]}"
options = Options.new(argv)
puts "options.export_folder: #{options.export_folder}"
options.export_folder.should == argv[1]
end
end
end
end
[/code]
class Options:
[code]
module PropertyInjector
class Options
def initialize(argv)
@bundle_folder = DEFAULT_BUNDLE_FOLDER
@export_folder = DEFAULT_EXPORT_FOLDER
@import_file_path = File.join(DEFAULT_IMPORT_FOLDER,
EXCEL_FILE_NAME)
@export = true
@locales = ['en']
parse(argv)
end
private
def parse(argv)
OptionParser.new do |opts|
opts.banner = "Usage: translation properties injector
[options]."
opts.on("-e [EXPORT_FOLDER]", "--export [EXPORT_FOLDER]",
String, "Path to the export folder to contain a generated Excel file,
(default=#{DEFAULT_EXPORT_FOLDER}") do |folder|
@export = true
@export_folder = folder if folder
end
opts.on("-i [EXCEL_FILE_PATH]", "--import [EXCEL_FILE_PATH]",
String, "Path to the Excel file to import translations from
(default=#{DEFAULT_IMPORT_FOLDER}/#{EXCEL_FILE_NAME})") do |file_path|
@export = false
@import_file_path = file_path if file_path
end
opts.on("-b [BUNDLE_FOLDER]", "--bundle [BUNDLE_FOLDER]",
String, "Path to the folder containing properties files,
(default=#{DEFAULT_BUNDLE_FOLDER})") do |folder|
@bundle_folder = folder if folder
end
opts.on("-l [l1,l2,l3]", "--langs [l1,l2,l3]", Array, "Locales
values to use separated by comma, starting from the known one,
default=en") do |langs|
if langs
@locales = langs.map(&:downcase)
@locales.uniq!
end
end
opts.on("-", "--help", "Show this message") do
puts opts
exit
end
begin
argv = ["-h"] if argv.empty?
opts.parse!(argv)
rescue OptionParser::ParseError => e
STDERR.puts e.message, "\n", opts
exit(1)
end
end
end
end
end
[/code]
After running the test, here is what I got:
[code]
PropertyInjector::Options
#source folder option
argv[0]: -e
argv[1]: path/to/some/folder
options.export_folder: path/to/some/folder
sets up a source folder (FAILED - 1)
Failures:
1) PropertyInjector::Options#source folder option sets up a source
folder
Failure/Error: options.export_folder.should == argv[1]
expected: nil
got: "path/to/some/folder" (using ==)
# ./spec/property_injector/options_spec.rb:12:in `block (3 levels)
in <module:PropertyInjector>'
Finished in 0.01562 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/property_injector/options_spec.rb:6 #
PropertyInjector::Options#source folder option sets up a source folder
[/code]
WHY the second argument is NIL if it WAS NOT before
(path/to/some/folder)?
Thank you in advance.
on 2012-02-15 17:57
on 2012-02-16 11:14
I found why and shame on me :(((. The array variable 'argv' was passed by reference into the Options class and was modified there by 'parse' method. That's why, when returned back to the testing code, the array was nil.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.