スタブ/モックは初めてです。
ライブラリを実際に呼び出さずにモジュールのメソッドのみをテストできるように、外部ライブラリからメソッドをスタブするにはどうすればよいですか?
また、このモジュールを作成するための私のアプローチは正しいのでしょうか、それともプログラミングの重要な原則に違反しているのでしょうか?
# file_module.rb
module FileModule
require 'net/ftp'
@ftp = nil
def self.login
if !@ftp || @ftp.closed?
@ftp = Net::FTP.new(Rails.configuration.nielsen_ftp_server)
@ftp.login(Rails.configuration.nielsen_ftp_user, Rails.configuration.nielsen_ftp_password)
end
end
def self.get_list_of_files_in_directory(directory, type)
login
@ftp.chdir("/#{directory}")
files = case type
when "all" then @ftp.nlst("*")
when "add" then @ftp.nlst("*add*")
end
end
end
# file_module_spec.rb (RSpec)
require 'spec_helper'
describe NielsenFileModule do
describe ".get_list_of_files_in_directory" do
it "returns correct files for type all" do
# how to mock Net::FTP or stub all its methods so I simulate the return value of @ftp.nlst("*")?
NielsenFileModule.get_list_of_files_in_directory("test_folder", "all").count.should eq 6
end
end
end