RSpec denetleyici testi - boş yanıt. Vücut


103

Denetleyicilerimi RSpec ile test ederken bir sorunla karşılaşıyorum - response.body çağrısı her zaman boş bir dize döndürüyor. Tarayıcıda her şey doğru şekilde işlenir ve salatalık özellik testleri bunu doğru yapıyor gibi görünür, ancak RSpec her seferinde başarısız olur.

Yanıt nesnesindeki diğer beklentiler, örneğin response.should render_template('index')sorunsuz geçebilir.

Bu problemle daha önce karşılaştınız mı? Belki html yanıtı başka bir yolla elde edilebilir?

Rails 2.1.0, RSpec 1.2.7 sürümlerine gelince.

Yanıtlar:


195

Varsayılan olarak rspec-rails, görünüm şablonlarını gerçekten oluşturmasını önlemek için Rails'e saldırır . Şablon oluşturmanın sonucunu değil, yalnızca eylemlerinizin davranışını ve denetleyici testlerinizi filtrelemelisiniz - görünüm özellikleri bunun içindir.

Bununla birlikte, denetleyici özelliklerinizin normalde uygulamanın yapacağı gibi şablonları oluşturmasını istiyorsanız, render_viewsyönergeyi kullanın :

describe YourController do
  render_views
  ...
end

2
Teşekkür ederim, tam olarak ihtiyacım olan şey.
Toms Mikoss 01

2
Yıllardır Rails ile çalışıyorum ve şimdi nihayet denetleyici ile istek özellikleri arasındaki farkı anlıyorum. Teşekkürler!
Brian Underwood


2

Benzer bir problemle çalışırken (bu beni bu soruya yöneltti), aynı kedinin derisini yüzmenin farklı yolları olduğu aklıma geldi. Başka bir deyişle, gövde metnini kontrol etmek yerine, flaşın içeriğini kontrol edebilirsiniz.

response.body.should =~ /Invalid email or password/

aşağıdakilere eşdeğer bir kontrol olabilir:

flash[:alert].should == "Invalid email or password"

Bana göre ikincisi, her iki şekilde de çalışacağı için biraz daha esnek görünüyor, ancak her durumda uygun olmayabilir.

Şerefe,

John


2

Varsayılan olarak, RSpec-ray yapılandırması, denetleyici özellikleri için şablonların oluşturulmasını devre dışı bırakır

Bunu düzeltmenin yollarından biri, dosyanızdaki render_viewsayarı etkinleştirdiğinizden emin olmaktır rails_helper.rb. Bu sayede tüm testlerinizde global olarak çalışmasını sağlıyorsunuz.

RSpec.configure do |config|
  config.render_views
end

Veya render_views bildirimini tek bir grup olarak kullanın:

describe User do
  render_views
end

Bu konuda daha fazla bilgi bulabilirsiniz burada .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.