Denetleyicileri RSpec ile test ederken bir sorunla takıldım - response.body çağrısı her zaman boş bir dize döndürüyor. Tarayıcıda her şey doğru bir şekilde işlenir ve salatalık özellik testlerinin doğru olduğu anlaşılır, ancak RSpec her seferinde başarısız olur.
Yanıt nesnesindeki diğer beklentiler, örneğin response.should render_template('index')
herhangi bir sorun olmadan geçmek.
Bu problemle daha önce hiç karşılaştınız mı? Belki de yanıt html başka bir şekilde elde edilebilir?
Sürümlerde olduğu gibi, Rails 2.1.0, RSpec 1.2.7.
Varsayılan olarak, rspec rayları Rails'e önlemek aslında görünüm şablonlarını oluşturuyor. Yalnızca eylemlerinizin davranışını test etmeli ve şablon oluşturma işleminin sonucunu değil, denetleyici testlerinizi filtrelemeniz gerekir.
Bununla birlikte, kontrol cihazınızın özelliklerinin normalde uygulama olarak şablonlar oluşturmasını isterseniz, render_views
direktif:
describe YourController do
render_views
...
end
Benzer bir problemle çalıştığım için (bu soruya beni yönlendirdi), aynı kediyi cildin farklı şekilleri olduğu ortaya çıktı. 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/
eşdeğer bir kontrol olabilir:
flash[:alert].should == "Invalid email or password"
Bana göre ikincisi her iki şekilde de çalışacağından biraz daha esnek görünüyor, ancak her durumda uygun olmayabilir.
Alkış,
John
RSpec 2+: Eğer uçtan uca kontrol etmek istiyorsanız - url'ye yanıt verin - talep isteği yerine denetleyici özelliği.
Varsayılan olarak, RSpec rayları yapılandırması denetleyici özellikleri için şablonların oluşturulmasını devre dışı bırakır.
Bunu düzeltmenin yollarından biri, render_views
içinde ayar rails_helper.rb
dosya. Bu sayede tüm testlerde global olarak çalışabilirsiniz.
RSpec.configure do |config|
config.render_views
end
Veya render_views beyanını bireysel bir grupta kullanın:
describe User do
render_views
end
Bu konuda daha fazla bilgi edinebilirsiniz İşte.