Tôi có một chức năng, mà chấp nhận một khối, mở một tập tin, sản lượng và lợi nhuận:Làm thế nào để kiểm tra một chức năng mà phải mất một khối với rspec
def start &block
.....do some stuff
File.open("filename", "w") do |f|
f.write("something")
....do some more stuff
yield
end
end
Tôi cố gắng để viết một bài kiểm tra cho nó bằng cách sử rspec . Làm thế nào để tôi File.open để nó thông qua một đối tượng f (được cung cấp bởi tôi) cho khối thay vì cố gắng để mở một tập tin thực tế? Một cái gì đó như:
it "should test something" do
myobject = double("File", {'write' => true})
File.should_receive(:open).with(&blk) do |myobject|
f.should_receive(:write)
blk.should_receive(:yield) (or somethig like that)
end
end
Thật khó để kiểm tra điều này bởi vì những gì bạn muốn kiểm tra là nội bộ của phương pháp. Cách tệp của bạn tương tác với bất kỳ thứ gì bên ngoài phương thức? Từ ví dụ của bạn, bạn không sử dụng tệp bên ngoài phương thức và bạn cũng không thể tạo ra nó. Nếu một cái gì đó bên ngoài chức năng này cần các tập tin, sau đó có lẽ bạn nên xem xét đi qua các đối tượng tập tin vào phương pháp (tiêm phụ thuộc). Sau đó, bạn có thể thử các tập tin không có vấn đề. Nếu bạn cần phải kiểm tra một cái gì đó về tập tin đó, có lẽ bạn nên xem xét phá vỡ nó ra thành một phương pháp riêng biệt? – Raj
Cảm ơn ... đã làm một cái gì đó như thế, chia thành nhiều phương pháp, stubbed vài chức năng như File.stub (mở) .and_yield (my_double), vv – constantine1