初始化Ruby模块

时间:2013-02-22 03:23:26

标签: ruby-on-rails ruby

尝试学习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

1 个答案:

答案 0 :(得分:3)

简答:您无法实例化模块对象

module A
end

class B
end

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

要测试模块,您可以将其包含在像这样的对象中

  object = Object.new
  object.extend(TestGem)

如果你的模块依赖于某些类行为,你可以创建一些示例类。