2013-06-06 10 views
9

Trong thử nghiệm của tôi, tôi đang khởi tạo một lớp mới có tên là Package với một số tham số.Rspec - cần phải mở tệp File.open được gọi trong tệp khác

Khi khởi tạo lớp này, tôi mở một tệp có sẵn trên các hộp điều khiển từ xa nhưng không phải là một cái gì đó thường có ở đó. Tôi đã tự hỏi làm thế nào tôi sẽ đi về stubbing phương pháp đó trong thử nghiệm của tôi.

Tôi đang sử dụng rspec và mocha. Tôi đã thử một cái gì đó như:

File.stubs(:open).with(:file).returns(File.open("#{package_root}/test_files/test.yml")) 

Tôi đã có dòng này trước khi tôi khởi tạo Package trong thử nghiệm của mình.

Tôi đã nhận lỗi này:

unexpected invocation: File.open('package/test_files/test.yml') 
    satisfied expectations: 
    - allowed any number of times, not yet invoked: File.open(:file) 

Tôi không phải là quen thuộc với rspec hoặc mocha, vì vậy giúp đỡ được đánh giá cao. Cảm ơn!

Trả lời

8

Tôi không chắc rằng bạn cần phần .with(:file), hãy thử bỏ hoàn toàn. Ngoài ra, tôi tin rằng bằng cách chỉ định nó theo cách bạn đang nói với nó để mong đợi một người nào đó gọi phương thức đó và chuyển cho nó một biểu tượng :file thay vì ví dụ: một tên chuỗi. Cũng xem xét gia tải file test YAML và chỉ trở về rằng:

let(:file_like_object) { double("file like object") } 

File.stub(:open).and_return(file_like_object) 
+0

tôi cài đặt sẵn các YAML kiểm tra và làm việc. Cảm ơn! –

11

Cú pháp mới cho cuống trông như thế này:

allow(File).to receive(:open).with('file_name').and_return(file_like_object) 
Các vấn đề liên quan