2016-10-07 56 views
10

içeren bir kontrolör ben Raylar ActionController::Live modülünü içeren bir denetleyici var. Ben FileTail gem kullanarak okunurken bir kayıt dosyasına, içeriğini gösteren ve bu yüzden gibi ActionController::Live den SSE kullanıyorum:Test ActionController :: Canlı

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 

Ben Rspec kullanarak live eylemi test etmek istiyorum. Bu şu anda ne var:

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

Ben yerinde after ile çizgi yoksa, Spec geçtiği ama sadece dinleme devam ediyor ve bağlantı dolayısıyla gözlük bitirip asla hiçbir zaman kapatıldı Onları elle öldürmek zorunda. Ben after çizgi varsa

, bazen geçer, ancak çoğu kez bir istisna atar ve gözlük başarısız.

fatal: 
    No live threads left. Deadlock? 

Bu işi yapabileceğimin bir yolu var mı? Belki de bunun herhangi bir yerde bulamaması gereken belirli bir yolu vardır.

+0

: http://stackoverflow.com/a/27383737/3109182 – Anthony

cevap

0

kabul (veya diğer) test değil, entegrasyon vardır. muhtemelen böyle bir şey izlemek ister ki anlamı istek (ana iş parçacığı kapalı) ayrı bir iş parçacığı taşınır gibi görünüyor dokümanlar dayanarak