2016-10-26 3 views
0

Ich bin neu bei Schienen und ich teste meine Devise Edelstein Benutzer mit Capybara rspec und Fabrik Mädchen.Testing Devise Mit Capybara rspec und Fabrik Mädchen

Hier spec Code:

require 'rails_helper' 
RSpec.describe User, type: :request do 
    it "displays the user's email after successful login" do 
    user = FactoryGirl.create(:user, email: '[email protected]', password: 'password') 
    visit root_url 
    fill_in 'Email', with: '[email protected]' 
    fill_in 'Password', with: 'password' 
    click_button 'Log in' 
    expect page.has_content?('jdoe') 
    end 
end 

Das Problem ist in

expect page.has_content?('jdoe') No matter what i put instead 'jdoe' test works perfectly without any errors.

Hier ist ab Werk:

FactoryGirl.define do 
    factory :user do 
    email '[email protected]' 
    password 'password' 
    password_confirmation 'password' 
    end 
end 

Vielleicht habe ich etwas verpasst oder mit einem falschen Weg. Wie soll ich hier testen?

+1

Können Sie versuchen 'erwarten (Seite) .to have_content 'test @ test.com'' –

+0

1 Beispiel 0 Ausfälle wie bei einem 'jdoe' –

+0

So ist der Test mit' erwarten (Seite) .to have_content' jdoe'' ist auch grün, habe ich richtig verstanden? –

Antwort

1
# spec/features/sessions_spec.rb 
require 'rails_helper' 
RSpec.feature "Sessions" do 
    scenario "displays the user's email after successful login" do 
    user = FactoryGirl.create(:user) 
    visit root_url 
    fill_in 'Email', with: user.email 
    fill_in 'Password', with: user.password 
    click_button 'Log in' 
    expect(page).to have_content("Signed in successfully") 
    # will give a false postitive if form is rerended? 
    expect(page).to have_content(user.email) 
    end 
end 

Ein paar Dinge hier:

  1. ein feature und nicht für das Ende einer Anforderung spec Prüfung zu beenden.
  2. Objektattribute nicht hartcodieren. Der Kernpunkt der Fabriken ist, dass die Fabrik sich darum kümmert, einzigartige Daten zu erzeugen, so dass die Tests aufgrund des Restzustands keine falschen positiven Ergebnisse liefern.
  3. Verwenden Sie expect(page).to anstelle von expect page.should. expect(page).to legt einen Betreff fest und verwendet einen RSpec-Matcher, der den Text der Seite in einer Fehlermeldung anzeigt, wenn sie nicht übereinstimmt.
+2

Es gibt Tippfehler, sollte sein 'expect (Seite) .to have_content (user.email)' (ohne Fragezeichen) –

+0

1) Sitzungen zeigt die E-Mail des Benutzers nach erfolgreicher Anmeldung Fehler/Fehler: erwarten (Seite) .to have_content? (user.email) erwartet # antwortet auf 'has_content ??' Fehler nach Testlauf –

+0

@OleksandrAvoyants –

Verwandte Themen