用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