Tôi đang cố gắng loại bỏ Net :: SFTP từ một đối tượng. Dưới đây là mô hình:RSpec: Đặt SFTP
class BatchTask
require 'net/sftp'
def get_file_stream(host, username, password, path_to_dir, filename)
raise ArgumentError if host.nil? or username.nil? or password.nil? or path_to_dir.nil? or filename.nil?
file_stream = nil
Net::SFTP.start(host, username, password) do |sftp|
sftp.dir.glob(path_to_dir, filename) do |entry|
# Verify the directory contents
raise RuntimeError(true), "file: #{path_to_dir}/#{filename} not found on SFTP server" if entry.nil?
file_stream = sftp.file.open("#{path_to_dir}/#{entry.name}")
end
end
file_stream
end
end
Dưới đây là spec:
require 'spec_helper'
describe "SftpToServer" do
let(:ftp) { BatchTask::SftpToServer.new }
it "should return a file stream" do
@sftp_mock = mock('sftp')
@entry = File.stubs(:reads).with("filename").returns(@file)
@entry_mock = mock('entry')
@entry_mock.stub(:name).with("filename").and_return("filename")
@sftp_mock.stub_chain(:dir, :glob).and_yield(@entry_mock)
Net::SFTP.stub(:start).and_yield(@sftp_mock)
@sftp_mock.stub_chain(:file, :open).with("filename").and_yield(@file)
ftp.get_file_stream("ftp.test.com", "user", "password", "some/pathname", "filename").should be_kind_of(IO)
end
end
Đây là stacktrace:
Spec::Mocks::MockExpectationError in 'SftpToServer should return a file stream'
Mock "entry" received :name with unexpected arguments
expected: ("filename")
got: (no args)
/Users/app/models/batch_task/sftp_to_server.rb:12:in `get_file_stream'
/Users/app/models/batch_task/sftp_to_server.rb:9:in `get_file_stream'
/Users/app/models/batch_task/sftp_to_server.rb:8:in `get_file_stream'
./spec/models/batch_task/sftp_to_server_spec.rb:15:
Trước hết, là cách tiếp cận của tôi ngay tại đây? Tôi muốn loại bỏ chức năng của SFTP vì chúng tôi có thể tự tin rằng nó được kiểm tra khá tốt. Thay vào đó, tôi muốn tập trung vào việc đảm bảo rằng luồng tệp được trả về bởi "hộp đen" bên trong get_file_stream().
Thứ hai, làm thế nào tôi có thể phân tích chính xác sftp.file.open() để thực hiện việc này?
Cảm ơn trước về mọi ý tưởng tại đây!
@cheesewasel - làm việc như một sự quyến rũ! Cảm ơn đã giúp đỡ! – Sly
Không sao cả. :) –