2

Ruby を学ぼうとしている以下は、IO Ruby の機能をテストするために作成したモジュールです。次のテストを実行すると:

    subject{TestGem.new}    

    it 'should be_a Module' do
      subject.is_a Module
    end 

    it 'creates a config file' do
      subject.init_config
      File.open("program.config", "r") { |io| io.readline }.should eq "default_file.txt"    
    end 

両方でこのエラーが発生します。

 Failure/Error: subject{TestGem.new}
 NoMethodError:
   undefined method `new' for TestGem:Module

これが私がテストしているモジュールです。どんな助け/提案も大歓迎です:)

$LOAD_PATH.unshift File.expand_path("../test_gem", __FILE__)

require 'version'
require 'hello'

module TestGem

  @default_file_name
  @supported_types

  def initialize
    default_file_name = 'default_file.txt'
    supported_types = ['txt', 'pdf']
  end  

  puts "module TestGem defined"

  def self.init_config
    File.open('program.config', "w") do |f|
      f.write(yaml(@default_file_name))
      f.write(yaml(@supported_types))  
    end
  end  

  class MyFile

    def self.first(filename)
        File.open(filename, "r") {|f| f.readline}
    end

    def self.last(filename)
        File.open(filename, "r")[-1]
    end 
  end

  class MyError < StandardError
    puts "Standard Error"
  end   
end
4

1 に答える 1

4

簡単な答え: モジュール オブジェクトをインスタンス化することはできません

module A
end

class B
end

B.methods - A.methods #=> [:new, :superclass, :allocate]

モジュールをテストするには、次のようにオブジェクトに含めることができます

  object = Object.new
  object.extend(TestGem)

または、モジュールがクラスの動作に依存している場合は、サンプル クラスを作成できます。

于 2013-02-22T03:32:48.183 に答える