2014-04-18 12 views
5

Prima di tutto io sono nuovo in finto/stub, e sto avendo problemi beffardo/spegnendoTrouble in beffardo un database e stub: salva

Questo è il mio codice dell'applicazione:

describe 'Register an User' do 
    VALID_USERNAME = "..." 
    VALID_PASSWORD = "..." 
    VALID_USER = User.new(VALID_USERNAME, VALID_PASSWORD) 

    before (:each) do 
     User.any_instance.stub(:save).and_return(true) 
    end 

    it 'should create a new user' do 
     post :create, :username => VALID_USERNAME, :password => VALID_PASSWORD 
     expect(response.status).to eq(201) 
     #user_inserted = ... 
     #expect(user_inserted).to eq(VALID_USER) 
    end 
end 

e:

def create 
     username = params[:username] 
     password = params[:password] 
     if not username or not password 
      render :json => '', :status => 400 
     else 
      success = User.new(username, password).save 
      if success 
       render :json => '', :status => 201 
      else 
       render :json => '', :status => 500 
      end 
     end 
    end 

che sto cercando di fare un mock di ActiveRecord, per testare 'creare', senza necessità di testare 'ottenere'. L'idea qui è quando chiamo 'user.save' può salvare l'utente senza usare il database, e quindi accedo al mio caso di test, così garantisco che l'utente è stato 'inserito' nel mio database.

Se eseguo il test, passa, ma non sto verificando cosa sono disposto a fare. Qualche aiuto o idea?

Grazie!

+0

Che cos'è 'User.new (VALID_USERNAME, VALID_PASSWORD)'? Il metodo 'new' è il tuo metodo personalizzato? Se sì, cosa restituisce? Fai attenzione che ['new'] (http://api.rubyonrails.org/classes/ActiveModel/Model.html#method-c-new) di ActiveRecord accetta l'hash – gotva

risposta

1

Ciò non ha senso in quanto non è possibile testare l'inserimento nel database senza inserire nel database. Perché?

Rails è dotato di convalide incorporate che diventano il primo passo per il salvataggio di un elemento. Se passano le convalide, l'elemento viene inserito tramite ActiveRecord nel database. Le convalide del database iniziano in questo passaggio e, in caso di esito negativo, sollevano un'eccezione.

Così. Se si desidera verificare se l'utente potrebbe essere creato nel database, aggiungere le convalide al modello che corrisponde al database. E poi sarai in grado di utilizzare il metodo is_valid?.

Ciò garantirà che l'utente sia valido per essere archiviato nel database. E di conseguenza, sarai in grado di usarlo ovunque sapendo che: user_instance.is_valid? definisce un oggetto inseribile.

Spero che questo sia quello che chiedi.