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 回答