Według Rails Edge Guide wszystko ActionDispatch :: IntegrationTest HTTP żądania podjęcia opcjonalnych argumentów nazwanych kluczowe:Nie można ustawić skrót sesji w szynach testu 5 kontrolera
get post_url, params: { id: 12 }, session: { user_id: 5 }
Wielki. Teraz, mam następujący kod w teście Kontroler:
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
I kiedy go uruchomić, moja próba nie i widzę następujące ostrzeżenie Deprecation:
ActionDispatch::IntegrationTest HTTP request methods will accept only
the following keyword arguments in future Rails versions:
params, headers, env, xhr
Tak oczywiście to szyny nie pozwalają mi przekazać argumentu słowa kluczowego o nazwie sesja.
Ponadto, zarówno starych metod ustawiania sesji w teście funkcjonalnym nie działa albo:
test "some thing" do
session[:user_id] = users(:stephen).id
# etc
end
NoMethodError: undefined method `session' for nil:NilClass
I to nie zbyt:
test "some thing" do
get '/login', nil, nil, { user_id: users(:stephen).id }
# etc
end
Haszysz sesji po prostu zignorowano i pojawiło się ostrzeżenie o wycofywaniu się z szyny przyjmującej tylko 4 różne nazwane argumenty.
Czy ktoś ma takie problemy z Railsami 5.rc1?
Według przykładu 'dostać posta: POST_URL, params: {id: 12}, sesja: {user_id: 5}' drugi argument jest * params *, 'get '/ login', sesja: {user_id: users (: stephen) .id}' ale przekazujesz sesję *, czy próbowałeś 'get '/ login', params: {}, session: { user_id: users (: stephen) .id} '? –
@ Зелёный argumenty są całkowicie opcjonalne, a kolejność jest nieistotna, i tak, wypróbowałem twój pomysł, i to nie rozwiązało problemu – stephenmurdoch
To dziwne, ponieważ działa to płynnie w moich testach –