Domanda

Sto imparando rais dal libro del tutorial dei Rails: http://ruby.railstturial.org/chapters/sign-in-sign-out#fnref:9.14

Sto lavorando all'esercizio. L'assegnazione è quella di creare un metodo di accesso in helper Spec in modo che possa essere utilizzato nei test di integrazione. Ha già dato il codice:

def integration_sign_in(user)
    visit signin_path
    fill_in :email,    :with => user.email
    fill_in :password, :with => user.password
    click_button
  end

Quindi, nel mio test di integrazione layout_links_spec.rb, ho intenzione di usarlo.

before(:each) do
      @user = Factory(:user)
      visit signin_path
      fill_in :email,    :with => @user.email
      fill_in :password, :with => @user.password
      click_button
      # integration_sign_in(Factory(:user))
    end

Commento tutto e uso integration_sign_in(Factory(:user)). L'errore che ricevo è

ActiveRecord::RecordInvalid:
       Validation failed: Email has already been taken

Tuttavia, se utilizzo l'originale che sembra così simile alla funzione integrazione_sign_in, i test passano. Qualcuno può fornire una spiegazione per favore?

Grazie.

È stato utile?

Soluzione

Sembra che il tuo: User Factory sta restituendo lo stesso indirizzo email ogni volta che crea un utente. Perché hai il prima (: ciascuno) sta per fare e imbottire nel DB più di un utente e avranno tutti la stessa e -mail.

Se pubblichi la tua fabbrica, probabilmente possiamo modificarla per usare una sequenza o trovare una soluzione alternativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top