2009-10-09 36 views
10

Tôi đang sử dụng rspec cho thử nghiệm của mình trong một dự án ruby ​​và tôi muốn xác định rằng chương trình của tôi không được xuất ra bất cứ điều gì khi tùy chọn -q được sử dụng. Tôi đã thử:kiểm tra (không có) `puts` trong RSpec

Kernel.should_not_receive :puts 

Điều đó không dẫn đến kiểm tra không thành công khi có đầu ra cho bảng điều khiển.

Làm cách nào để xác minh sự vắng mặt của đầu ra văn bản?

Trả lời

15

đặt sử dụng $ stdout nội bộ. Do cách thức hoạt động, cách dễ nhất để kiểm tra chỉ đơn giản là sử dụng: $stdout.should_not_receive(:write)

Kiểm tra nội dung nào không được ghi lên giá trị như mong đợi. Kernel.puts (như trên) sẽ chỉ dẫn đến một thử nghiệm không thành công khi nó được gọi một cách rõ ràng (ví dụ: Kernel.puts "Some text"), trong đó như hầu hết các trường hợp nó gọi trong phạm vi đối tượng hiện tại.

4

Câu trả lời được chấp nhận ở trên không chính xác. Nó "hoạt động" bởi vì nó không nhận được một: viết tin nhắn nhưng nó có thể đã nhận được một: đặt tin nhắn.

Dòng đúng nên đọc:

$stdout.should_not_receive(:puts) 

Ngoài ra bạn cần phải chắc chắn rằng bạn đặt dòng trước mã cho phép ghi vào stdio. Ví dụ:

it "should print a copyright message" do 
    $stdout.should_receive(:puts).with(/copyright/i) 
    app = ApplicationController.new(%w[project_name]) 
end 


it "should not print an error message" do 
    $stdout.should_not_receive(:puts).with(/error/i) 
    app = ApplicationController.new(%w[project_name]) 
end 

Đó là một RSpec làm việc kể từ một dự án

+0

Đối với tôi, mong đợi thực tế: viết tác phẩm, nhưng mong đợi: puts không. Mã của bạn có gọi $ stdout.puts hoặc chỉ cần đặt? –

+0

Chỉ cần đặt, tôi sẽ KHÔNG BAO GIỜ viết đến $ stdout vì nó không phải là rất năng động. Thay vào đó tôi sẽ gán lại $ stdout, giống như một stringio, do đó, "đặt" đi đến những gì tôi muốn. Hãy nhớ rằng bạn không mong đợi: viết bạn KHÔNG mong đợi viết. Cùng một điều với đặt. Tôi sẽ kiểm tra để xem những gì bạn đang nhận được bằng cách làm một bài kiểm tra tích cực cũng như một bài kiểm tra tiêu cực. Ví dụ, nếu tôi nói "Tôi không nên có một chiếc mũ cho món quà thế tục cho ngày." Điều đó không có nghĩa là tôi đã không nhận được một chiếc khăn. –

Các vấn đề liên quan