[rspec-users] Such a simple test fails. But why ?

Serguei Cambour lists at ruby-forum.com
Wed Feb 15 11:57:18 EST 2012


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.

-- 
Posted via http://www.ruby-forum.com/.


More information about the rspec-users mailing list