rspec, factory_girl & capybara ile entegrasyon testleri yazmaya çalışıyorum. Ayrıca salatalık yüklü, ama kullanmıyorum (bilgime).Raylar 3'te Rspec & Capybara ile Test Oturumları
Temel olarak db'yi kullanıcımla önceden doldurmak istiyorum, sonra ana sayfama git ve giriş yapmayı dene. User_path (@ user) öğesine yönlendirmeli. Bununla birlikte, oturumlar benim/rspec/istekler/bütünleştirme sınamalarında kalıcı görünmüyor gibi görünmektedir.
Benim Spec: /rspec/requests/users_spec.rbrequire 'spec_helper'
describe "User flow" do
before(:each) do
@user = Factory(:user)
end
it "should login user" do
visit("/index")
fill_in :email, :with => @user.email
fill_in :password, :with => @user.password
click_button "Login"
assert current_path == user_path(@user)
end
end
İade: Yerine
Failures:
1) User flow should login user
Failure/Error: assert current_path == user_path(@user)
<false> is not true.
# (eval):2:in `send'
# (eval):2:in `assert'
# ./spec/requests/users_spec.rb:16
, benim please_login_path yönlendirir - Giriş herhangi bir nedenle başarısız olursa (gerçekleşmesi gereken veya eğer oturum [: user_id] ayarlanmamışsa).
session.inspect'i yerleştirmeye çalışırsam, bir nil nesnesi olarak başarısız olur. Ben kontrolör testleri (/rspec/controllers/sessions_spec.rb) bunu denerseniz
, hiç sorun oturumuna erişebilirler ve ben oturumu çağırabilirsiniz [: user_id] Eğer varsa
Bunun ilgili olup olmadığını bilmiyorum, ancak @ user.password yazarak bir kullanıcının şifresini alamamalısınız. Bu, uygulamanızdaki bir güvenlik açığıdır. Şifreleri düz metin kullanarak mı saklıyorsunuz? –
İlgili değil ve muhtemelen bir güvenlik açığı değil. #password'a yapılan çağrı, fabrika tarafından örnek değişkeninde ayarlandığından yalnızca bir şifre döndürür. Muhtemelen Devise'yi veya db'ye açık metin içinde parola özniteliğini sürdürmeyen benzer bir şey kullanıyordur ve bu durumda kullanılamayacak örnek değişkenleri de mevcut değildir. –