Witam, mam problem podczas testowania logowania, dodam, że w przeglądarce wszystko jest ok.
SessionsController:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_name(params[:session][:name].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
flash[:success] = 'Zalogowano'
redirect_to user
else
flash.now[:error] = 'Niepoprawna nazwa lub haslo'
render 'new'
end
end
def destroy
sign_out
redirect_to root_url
end
end
widok new kontrolera sesji
[code]<% provide( :title, ‘Logowanie’) %>
Logowanie
<%= form_for(:session, url: sessions_path) do |f| %>
[/code]
fragment testów:
[code]describe "with valid informaton" do
let(:user) { FactoryGirl.create(:user) }
before do
visit signin_path
fill_in "Naz", with: user.name
fill_in "Has", with: user.password
click_button "Loguj"
end
it { should have_selector('div.alert.alert-success', text: 'Zalogowano')}
it { should_not have_selector('div.alert.alert-error', text: 'Niepoprawna')}
it { should have_selector('title', text: user.name) }
it { should have_link('Profil'), href: user_path(user) }
it { should have_link('Wyloguj', href: signout_path) }
it { should_not have_link('Zaloguj', href: signin_path) }
it { should_not have_selector('title', text: 'Logowanie') }
describe "followed by signout" do
before { click_link "Wyloguj"}
it { should have_link('Zaloguj')}
end
end[/code]
factories.rb:
FactoryGirl.define do
factory :user do
name "Mateusz"
email "Mat@example.com"
password "foobar"
password_confirmation "foobar"
end
end
błędy:
[code]Failures:
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should have_selector(‘div.alert.alert-suc
cess’, text: ‘Zalogowano’)}←[0m
←[31mexpected css “div.alert.alert-success” with text “Zalogowano” to ret
urn something←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:29
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should have_selector(‘title’, text: user.
name) }←[0m
←[31mexpected css “title” with text “Mateusz” to return something←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:31
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should_not have_link(‘Zaloguj’, href: sig
nin_path) }←[0m
←[31mexpected link “Zaloguj” not to return anything←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:34
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should have_link(‘Profil’), href: user_pa
th(user) }←[0m
←[31m{:href=>"/users/1"}←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:32
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should have_link(‘Wyloguj’, href: signout
_path) }←[0m
←[31mexpected link “Wyloguj” to return something←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:33
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should_not have_selector(‘title’, text: ’
Logowanie’) }←[0m
←[31mexpected css “title” with text “Logowanie” not to return anything←[0
m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:36
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should_not have_selector(‘div.alert.alert
-error’, text: ‘Niepoprawna’)}←[0m
←[31mexpected css “div.alert.alert-error” with text “Niepoprawna” not to
return anything←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:30
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton followed by signout
←[31mFailure/Error:←[0m ←[31mbefore { click_link “Wyloguj”}←[0m
←[31mCapybara::ElementNotFound:←[0m
←[31mno link with title, id or text ‘Wyloguj’ found←[0m
←[36m # (eval):2:in click_link'←[0m ←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:39 :inblock (5 levels) in <top (required)>'←[0m[/code]
oto cały kod testów, znajduje się tam wpis subject {page}
[code] require ‘spec_helper’
describe “Autentyfikacjas” do
subject {page}
describe “signin page” do
before {visit signin_path}
it { should have_selector( ‘h1’, text:‘Logowanie’ )}
end
describe “signin” do
before {visit signin_path }
describe "with invalid informaton" do
before {click_button "Loguj"}
it { should have_selector('title', text: "Logowanie")}
it { should have_selector('div.alert.alert-error', text: 'Niepoprawna')}
end
describe "with valid informaton" do
let(:user) { FactoryGirl.create(:user) }
before do
visit signin_path
fill_in "Naz", with: user.name
fill_in "Has", with: user.password
click_button "Loguj"
end
it { should have_selector('div.alert.alert-success', text: 'Zalogowano')}
it { should_not have_selector('div.alert.alert-error', text: 'Niepoprawna')}
it { should have_selector('title', text: user.name) }
it { should have_link('Profil'), href: user_path(user) }
it { should have_link('Wyloguj', href: signout_path) }
it { should_not have_link('Zaloguj', href: signin_path) }
it { should_not have_selector('title', text: 'Logowanie') }
describe "followed by signout" do
before { click_link "Wyloguj"}
it { should have_link('Zaloguj')}
end
end
end
end[/code]
dopisałem też page.should, ale dalej są błędy.
Te same błędy?
Spróbuj dopisaćjeden test z zawartością page.should have_content(‘cokolwiek’) i pokaż jego wynik. Powinien wypisać zawartość aktualnej strony.
A fabryka na pewno tworzy poprawnego usera? Zapisuje się do bazy danych?
Spróbuj użyć w którymś z failujących testów funkcji save_and_open_page, żeby zobaczyć co właściwie renderuje ci na tej stronie.
EDIT:
Z innych pomysłów: zrób rake db:test:prepare i zamień before na before(:each)
describe “signin page” do
before {visit signin_path}
it { should have_selector( ‘h1’, text:‘Logowanie’ )}
end
describe “signin” do
before {visit signin_path }
describe "with invalid informaton" do
before {click_button "Loguj"}
it { should have_selector('title', text: "Logowanie")}
it { should have_selector('div.alert.alert-error', text: 'Niepoprawna')}
end
describe "with valid informaton" do
let(:user) { FactoryGirl.create(:user) }
before do
visit signup_path
fill_in "Nazwa", with: "Mateusz"
fill_in "Email", with: "Mateusz@m.pl"
fill_in "Has", with: "Mmmmmm"
fill_in "Potwierd", with: "Mmmmmm"
click_button "Zarejestruj"
visit signin_path
fill_in "Name", with: "Mateusz"
fill_in "Password", with: "Mmmmmm"
click_button "Loguj"
end
it {save_and_open_page; should have_selector('div.alert.alert-success', text: 'Zalogowano')}
it { should_not have_selector('div.alert.alert-error', text: 'Niepoprawna')}
it { should have_selector('title', text: "Mateusz") }
it { should have_link('Wyloguj', href: signout_path) }
it { should_not have_link('Zaloguj', href: signin_path) }
it { should_not have_selector('title', text: 'Logowanie') }
it { page.should have_content('cokolwiek')}
describe "followed by signout" do
before { click_link "Wyloguj"}
it { should have_link('Zaloguj')}
end
end
end
end[/code]
oto błędy:
[code]Failures:
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should have_selector(‘title’, text: “Mate
usz”) }←[0m
←[31mexpected css “title” with text “Mateusz” to return something←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:38
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { page.should have_content(‘cokolwiek’)}←[0
m
←[31mexpected there to be content “cokolwiek” in "Sklep | Logowanie\n
\n \n Sklep\n Home\n Pomoc\n \n \n
Profil \n \n Mój Profil\n
Ustawienia\n \n \n Wyloguj\n
\n \n \n \nNiepoprawna nazwa lub haslo\n
n \nLogowanie\n\n\n\t\n\t\t\n\n\t\tName\n\t\tPassword\n\t\t\n\n\n\t\n\n\n\n
\n \n \n \n \n Copyright by wilqq, version:\n 0.1
Beta\n \n "←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:43
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit {save_and_open_page; should have_selector(’
div.alert.alert-success’, text: ‘Zalogowano’)}←[0m
←[31mexpected css “div.alert.alert-success” with text “Zalogowano” to ret
urn something←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:36
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should_not have_selector(‘title’, text: ’
Logowanie’) }←[0m
←[31mexpected css “title” with text “Logowanie” not to return anything←[0
m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:42
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should_not have_selector(‘div.alert.alert
-error’, text: ‘Niepoprawna’)}←[0m
←[31mexpected css “div.alert.alert-error” with text “Niepoprawna” not to
return anything←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:37
:in `block (4 levels) in <top (required)>'←[0m[/code]
Wydaje się, że użytkownik został zalogowany, nie ma linku do logowania, jest do wylogowania się, ale jednak jest komunikat o niepoprawnym zalogowaniu. Nie wiem też, czy dobrze użyłem opcji save_and_open_page, dodanie tego nie powoduje żadnej akcji.
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should_not have_selector(‘div.alert.alert
-error’, text: ‘Niepoprawna’)}←[0m
←[31mexpected css “div.alert.alert-error” with text “Niepoprawna” not to
return anything←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:37
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit {save_and_open_page should have_selector(‘d
iv.alert.alert-success’, text: ‘Zalogowano’)}←[0m
←[31mexpected css “div.alert.alert-success” with text “Zalogowano” to ret
urn something←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:36
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should_not have_selector(‘title’, text: ’
Logowanie’) }←[0m
←[31mexpected css “title” with text “Logowanie” not to return anything←[0
m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:42
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { page.should have_content(‘cokolwiek’)}←[0
m
←[31mexpected there to be content “cokolwiek” in "Sklep | Logowanie\n
\n \n Sklep\n Home\n Pomoc\n \n \n
Profil \n \n Mój Profil\n
Ustawienia\n \n \n Wyloguj\n
\n \n \n \nNiepoprawna nazwa lub haslo\n
n \nLogowanie\n\n\n\t\n\t\t\n\n\t\tName\n\t\tPassword\n\t\t\n\n\n\t\n\n\n\n
\n \n \n \n \n Copyright by wilqq, version:\n 0.1
Beta\n \n "←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:43
:in `block (4 levels) in <top (required)>'←[0m
Autentyfikacjas signin with valid informaton
←[31mFailure/Error:←[0m ←[31mit { should have_selector(‘title’, text: “Mate
usz”) }←[0m
←[31mexpected css “title” with text “Mateusz” to return something←[0m
←[36m # c:/Users/Mateusz/work/sklep/spec/requests/autentyfikacjas_spec.rb:38
:in `block (4 levels) in <top (required)>'←[0m[/code]