2016-10-07 16 views
10

Tôi có bộ điều khiển bao gồm mô-đun Rails ActionController::Live. Tôi đang hiển thị nội dung của một logfile, hiện đang được đọc bằng FileTail đá quý, và sử dụng SSE từ ActionController::Live như vậy:Kiểm tra bộ điều khiển bao gồm ActionController :: Live

class LogsController < ApplicationController 
    include ActionController::Live 

    def live 
    response.headers['Content-Type'] = 'text/event-stream' 
    sse = SSE.new(response.stream, event: 'queries') 
    File.open(logfile_location) do |log| 
     log.extend(File::Tail) 
     log.interval = 1 
     log.backward(10) 
     log.tail {|line| sse.write line} 
    end 
    rescue => e 
    Rails.logger.info "Error Message:: #{e.message}" 
    ensure 
    sse.close 
    end 
end 

Tôi muốn thử nghiệm các hành động live sử dụng Rspec. Đây là những gì tôi hiện có:

before { get :live } 
it { expect(response.headers['Content-Type']).to eq("text/event-stream") } 
after {response.stream.close unless response.stream.closed? } 

nếu tôi không có phù hợp với after tại chỗ, chuyền spec nhưng nó chỉ cần giữ trên nghe và kết nối được không bao giờ đóng cửa, do đó các thông số kỹ thuật không bao giờ kết thúc và bạn phải giết chúng bằng tay.

Nếu tôi có đường dây after, thỉnh thoảng nó sẽ vượt qua, nhưng hầu hết các lần nó lại ném ngoại lệ và thông số kỹ thuật không thành công.

fatal: 
    No live threads left. Deadlock? 

Có cách nào tôi có thể thực hiện công việc này không? Có thể có một cách cụ thể mà điều này phải được kiểm tra mà không thể tìm thấy ở bất cứ đâu.

+0

Dựa trên tài liệu có vẻ như yêu cầu được chuyển đến một chuỗi riêng biệt (ngoài chuỗi chính) có nghĩa là bạn có thể muốn thực hiện theo một cái gì đó như thế này: http://stackoverflow.com/a/27383737/3109182 – Anthony

Trả lời

0

Có sự chấp nhận (hoặc thử nghiệm khác), không tích hợp.

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