2011-11-28 28 views
8

Bir İleti denetleyicim var ve bazı kimlik doğrulamasını hızlı ve kolay bir şekilde eklemek için Devise'yi yeni yükledim. Devise'i kurmadan önce, Mesajlar denetleyicimin 'yeni' eylemi için bazı testler yapmıştım. benim spec_helper.rb dosyasınaRspec, Devise, Fabrika kız - Fabrika kullanıcısı Rspec kontrol cihazı testi ile nasıl oturum açılır?

config.include Devise::TestHelpers, :type => :controller 

satırı eklendi kadar hazırlamak kurduktan sonra, benim testler başarısız bulundu.

Ben de PostsController çizgiyi

before_filter :authenticate_user!, :except => [:show, :index] 

var. Benim testleri çalıştırdığınızda

Şimdi, hepsi bu 2 hariç geçmesi: Ben de Fabrika kızı kullanıyorum

it "should be successful" do 
    get :new 
    response.should be_success 
    end 

    it "should have the right title" do 
    get :new 
    response.should have_selector('title', :content => @base_title + " | New post") 
    end 

. Hata, parametre haricinde before_filter tarafından neden olur. Kullanıcıyı rspec'te bir fabrika kullanıcısı ile imzalayabilmem gerekir. Fabrika kullanıcısını Rspec denetleyici testinde nasıl imzalarım? Fabrika kullanıcısını nasıl tanımlarım?

Factory.define :user do |user| 
    user.name     "Test User" 
    user.email     "[email protected]" 
    user.password    "password" 
    user.password_confirmation "password" 
end 

Ama sonra hata alıyorum:

benim factories.rb bu denedi Herhangi bir yardım çok takdir

NoMethodError: 
    undefined method `password_salt=' for #<User:0x00000103cac958> 

. Teşekkürler.

cevap

7

Denetleyici sınamalarını kaldırmanızı ve bunun yerine Salatalık öykülerini kullanmanızı öneririm - RSpec, Salatalık olduğu için kullanıcılara bakan şeyleri test etmek için uygun değildir.

Salatalık içinde, kullanıcının tam olarak ne yapacağını taklit etmek için kullanıcı arabiriminde oturum açmak istersiniz. Aynı şeyi bir denetleyici özelliğiyle yapmaya eğilimliysem de, bazı insanlar bunun yerine alay etmeyi tercih edebilir.

undefined method password_salt='a gelince, test DB'nizi mi taşıdınız? `Başarısızlık/Hata:

+0

ahhhh tamamen şimdi alıyorum ... Test DB geçirmek unuttum! @user = create (Fabrika (: Kullanıcı)) ActiveRecord :: RecordInvalid: Doğrulama başarısız: E-posta can' t boş, Şifre boş bırakılamaz ' – Jack

+0

Bu hatayı hangi kod veriyor? (Hata mesajı, bir dosya adı ve satır numarası içermelidir.) –

+0

Bu, Mesaj Denetleyicimde 'önce bir test var (: her biri) @user = oluştur! (Fabrika (: kullanıcı)) test_sign_in (@ user) end' – Jack