Secondo il Rails Edge Guide tutti ActionDispatch :: IntegrationTest richieste HTTP prendono argomenti chiave con nome opzionali:Impossibile impostare sessione di hash in Rails prova 5 regolatore
get post_url, params: { id: 12 }, session: { user_id: 5 }
Grande. Ora, ho il seguente codice in un test di controllo:
test 'should redirect from login page if user is logged in' do
get '/login', session: { user_id: users(:stephen).id }
assert_redirected_to root_url, 'Expected redirect to root'
end
E quando l'eseguo, il mio test fallisce e vedo il seguente avviso deprecazione:
ActionDispatch::IntegrationTest HTTP request methods will accept only
the following keyword arguments in future Rails versions:
params, headers, env, xhr
Così, ovviamente si tratta di I binari non mi permettono di passare un argomento di parole chiave chiamato sessione.
Inoltre, entrambi i vecchi metodi di impostazione della sessione in un test funzionale non funzionano più o:
test "some thing" do
session[:user_id] = users(:stephen).id
# etc
end
NoMethodError: undefined method `session' for nil:NilClass
E questo non troppo:
test "some thing" do
get '/login', nil, nil, { user_id: users(:stephen).id }
# etc
end
L'hash di sessione è appena ignorato e appare l'avviso di deprecazione sui binari che accetta solo 4 diversi argomenti con nome.
Qualcun altro ha questo tipo di problemi con Rails 5.rc1?
Secondo l'esempio 'ottengono POST_URL, params: {id: 12}, sessione: {user_id: 5}' il secondo argomento è * params *, 'get '/ login', sessione: {user_id: users (: stephen) .id}' ma passi la * session *, hai provato 'get '/ login', params: {}, session: { user_id: users (: stephen) .id} '? –
@ Зелёный gli argomenti sono tutti completamente opzionali, e l'ordine non è importante, e sì ho provato la tua idea, e non risolve il problema – stephenmurdoch
Questo è strano, perché funziona senza problemi nei miei test –