Sto seguendo il tutorial di Michael ROR e creando un sistema di autenticazione utente. C'è un privilegio di amministratore, che consente agli utenti di eliminare altri utenti. I link speciali "Elimina" vengono visualizzati nella pagina di elenco degli utenti quando si accede come utente amministratore privato. La mia app funziona bene ma i test di rspec non riescono per un motivo a me sconosciuto.I test Rspec per i collegamenti di "eliminazione" amministrativi falliscono. Tutorial ROR 3.2 di Michael Hartl - Capitolo 9.4.2
Ho separato i test in un altro file spec/requests/sat_spec.rb
e sto tentando di utilizzare pry gem per eseguire il debug, ma finora nessun successo.
describe "delete links" do
describe "as admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin
visit users_path
binding.pry
end
it { should have_link('delete', href: user_path(User.first)) }
it "should be able to delete another user" do
expect { click_link('delete') }.to change(User, :count).by(-1)
end
end
fallimenti dei test:
1) separated admin tests delete links as admin user
Failure/Error: it { should have_link('delete', href: user_path(User.first)) }
expected link "delete" to return something
# ./spec/requests/sat_spec.rb:25:in `block (4 levels) in <top (required)>'
2) separated admin tests delete links as admin user should be able to delete another user
Failure/Error: expect { click_link('delete') }.to change(User, :count).by(-1)
Capybara::ElementNotFound:
no link with title, id or text 'delete' found
# (eval):2:in `click_link'
# ./spec/requests/sat_spec.rb:28:in `block (5 levels) in <top (required)>'
# ./spec/requests/sat_spec.rb:28:in `block (4 levels) in <top (required)>'
Che cosa potrebbe dal problema qui o ancora più importante come eseguire il debug esso?
È possibile sborsare il mio codice qui https://github.com/tomek-rusilko/miniatury_katalog_2
Jeeez che era così ovvio! Mi sento stupido: D Grazie mille. Mettendo semplice 'FactoryGirl.create (: user)' prima di risolvere il problema. C'è un'altra cosa che è comparsa: perché FactoryGirl.create (: user) 'funziona ma' let (: user) {FactoryGirl.create (: user)} 'no? – tomruss
'let' viene valutato pigramente: il suo blocco non verrà chiamato finché non si utilizza la variabile' utente' ". Usa 'let!' (Con il punto esclamativo) invece se vuoi che il tuo blocco venga chiamato immediatamente. Ma ti consiglio di mettere il tuo 'FactoryGirl.create (: user)' nel blocco 'before'. – jdoe
Sì, è esattamente quello che ho fatto: 'before (: all) {5.times {FactoryGirl.create (: user)}}; dopo (: tutti) {User.delete_all} '. Ancora una volta - Grazie per l'aiuto. – tomruss