2011-01-15 27 views
27

Dosya gönderen denetleyici eylemi nasıl test edilir? RSpec send_file testing

Ben controller.should_receive(:send_file) testi ile yaparsanız

hiçbir şey oluşturulamadı olur çünkü "şablonu eksik" ile başarısız olur.

cevap

34

Googlingaround'dan, bir noktada render da çağrılacak gibi görünür. Ancak şablonsuz olarak, hataya neden olur.

çözüm de bunu saplama için gibi görünüyor:

controller.stub!(:render)
+0

Güzel, bunu neden ben düşünmedim :) – Mirko

+1

RSpec'in daha yeni sürümlerini kullanarak bunu görüntüleyen herkes için, 'stub!' Kullanımdan kaldırıldı. Sadece 'stub' –

+3

kullanın Ve Rspec 3'te 'izin (controller) .to almak için (: render)' – mehulkar

24

çalışan bir başka yoludur:

Bana göre
controller.should_receive(:send_file).and_return{controller.render :nothing => true} 

, bu gerçeği yakaladığı send_file amaçlanan yan etkisi başka hiçbir şeyin yapılmamasını sağlamaktır. (Gerçi, kuşkusuz saplama orijinal nesne üzerinde bir yöntemi çağırmak için biraz sakat görünüyor.)

+0

Raylar 4, RSpec 3: ''ve_return {value}' kullanımdan kaldırılmıştır. 'And_return (value)' veya 'and_return' olmadan bir uygulama bloğu kullanın. ' –

6

Ayrıca yapabilirsiniz:

result = get .... 

result.body.should eq IO.binread(path_to_file)