Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Ruby测试模块_Ruby - Fatal编程技术网

用Ruby测试模块

用Ruby测试模块,ruby,Ruby,我有一个模块,如下所示: module FileTypeProcessor def self.read(input_path:, with_headers: nil, return_headers: nil) raise MethodNotImplementedError end def self.write(output_path:, data:) raise MethodNotImplementedError end end 这就是我试图测试它的方式: r

我有一个模块,如下所示:

module FileTypeProcessor
  def self.read(input_path:, with_headers: nil, return_headers: nil)
    raise MethodNotImplementedError
  end

  def self.write(output_path:, data:)
    raise MethodNotImplementedError
  end
end
这就是我试图测试它的方式:

require 'spec_helper'

describe FileTypeProcessor do
  let(:dummy_class) { Class.new { extend FileTypeProcessor } }
  let(:input_path) { "some/input/path/file.csv" }
  let(:output_path) { "some/output/path/file.csv" }
  let(:data) { ['some', 'arbitrary', 'data'] }

  describe ".read" do
    subject { dummy_class.read(input_path: input_path) }

    it "raises an error if unimplemented" do
      expect{ subject }.to raise_error(MethodNotImplementedError)
    end
  end
但当我运行它时,我仍然得到了这个:

expected MethodNotImplementedError, got #<NoMethodError: undefined method `read' for #<Class:0x00007fd2820dc3f0>> with backtrace:

expected MethodNotImplementedError,get 35;您需要从模块中删除
self.

module FileTypeProcessor
  def read(input_path: nil, with_headers: nil, return_headers: nil)
    raise MethodNotImplementedError
  end
end

Class.new { extend FileTypeProcessor }.read # => MethodNotImplemented
如果希望能够通过模块调用这些方法,则必须将它们标记为公共模块函数:

module FileTypeProcessor
  def read(input_path: nil, with_headers: nil, return_headers: nil)
    raise MethodNotImplementedError
  end
  module_function :read
  public :read
end

FileTypeProcessor.read # => MethodNotImplemented
Class.new { extend FileTypeProcessor }.read # => MethodNotImplemented
Class.new { include FileTypeProcessor }.new.read # => MethodNotImplemented