Tôi đã có mã này:RSpec Mocks: mock/mang lại khối từ một phương pháp gọi
Net::SSH.start(@server, @username, :password => @password) do |ssh|
output = ssh.exec!(@command)
@logger.info 'SSH output: '
@logger.info output
end
tôi có thể thử các SSH.Start sử dụng khuôn khổ giả RSpec của như thế này, nói với tôi rằng tôi đã đã bắt đầu phiên SSH:
Net::SSH.should_receive(:start).with("server", "user", :password => "secret") do
@started = true
end
điều này cho tôi biết có hay không @started phiên ssh. bây giờ tôi cần phải thử ssh.exec! phương pháp, đủ dễ dàng:
Net::SSH.should_receive(:exec!).with("command")...
nhưng làm cách nào để gọi/gọi khối có chứa ssh.exec! gọi phương thức, vì tôi đã chế nhạo phương thức SSH.start? có lẽ một số phương pháp đơn giản tôi có thể gọi để thực hiện khối này, nhưng tôi không biết nó là gì và không thể tìm thấy bất kỳ giải thích thực sự tốt/tài liệu về khuôn khổ mocking của rspec.
không biết về should_receive ... có tài liệu nào tốt về nội dung này không? google-fu của tôi cũng thất bại cho tôi ... cũng vậy - điều gì sẽ xảy ra nếu tôi không quan tâm đến giá trị trả lại của khối bị chặn? Tôi chỉ muốn nó được thực hiện, để tôi có thể gọi should_receive trên ssh.exec! phương pháp. –
Đó là những gì 'should_receive' có nghĩa là: nếu nó không được nhận, kiểm tra sẽ thất bại. Theo như tài liệu, Sách RSpec thật tuyệt vời. Tôi khuyên bạn nên sử dụng cả RSpec và tìm hiểu về BDD nói chung. – Avdi
Ồ, và bạn có thể gọi '#and_yield()' mà không có đối số. – Avdi