Docker를 사용하는 매우 기본적인 Rails 5 애플리케이션입니다. 여기에는 Devise 등을 사용하지 않고 처음부터 빌드 한 일부 사용자 인증이 포함되어 있습니다. 이제, 카피 바라와 함께 요청 사양에 대해 배우기 시작하고 싶지만, 나는 꽤 이상한 문제 인 것처럼 보입니다.Capybara에서 POST 할 때 GET 요청
여기 내 로그인 폼 (sessions.new.erb
)입니다 :
<%= form_tag sessions_path do %>
<form class="m-t" role="form" action="/">
<div class="form-group">
<%= text_field_tag :email, params[:email], class: 'form-control', placeholder: "Email Address", required: "" %>
</div>
<div class="form-group">
<%= password_field_tag(:password, nil, class: 'form-control', placeholder: "Password", required: "") %>
</div>
<div class="form-group">
<%= check_box_tag :remember_me, 1, params[:remember_me] %>
<%= label_tag :remember_me %>
</div>
<div class="actions"><%= submit_tag "Log In", class: "btn btn-primary block full-width m-b" %></div>
</form>
<% end %>
그리고 내 requests/sessions_spec.rb
: 당신은 내가 같은 일을 볼 것 카피 바라를 추정 할 수동으로 테스트하는 경우
require "rails_helper"
RSpec.feature "Login", :type => :feature do
scenario "handles wrong email and password gracefully" do
visit login_path
fill_in "Email Address", :with => "something"
fill_in "Password", :with => "something"
click_button "Log In"
expect(page).to have_text("Email or password incorrect")
end
end
지금이 작동합니다. 그러나 그것은 계속 실패했다. 보호 된 컨트롤러에 액세스하려고 시도했지만 로그인하지 않은 경우 응용 프로그램이 구성되어있어 /login
으로 리디렉션되고 Please log in to see this page
이라는 메시지가 깜박입니다. Rspec 테스트는 이상한 것이 었습니다. Capybara가 다른 페이지를 방문하려고 시도했음을 암시합니다. 첫 번째 비트, 로그인 새로 만들기 SessionsController 번호로 괜찮 처리 GET됩니다
Started GET "/login" for 127.0.0.1 at 2017-10-17 06:59:26 +0000
Processing by SessionsController#new as HTML
Rendering sessions/new.html.erb within layouts/empty
Rendered sessions/new.html.erb within layouts/empty (1.1ms)
Completed 200 OK in 6ms (Views: 6.1ms | ActiveRecord: 0.0ms)
Started GET "/?email=something&password=[FILTERED]&commit=Log+In" for 127.0.0.1 at 2017-10-17 06:59:26 +0000
Started GET "/locations" for 127.0.0.1 at 2017-10-17 06:59:26 +0000
Processing by LocationsController#index as HTML
Redirected to http://www.example.com/login
Filter chain halted as :authenticate rendered or redirected
Completed 302 Found in 2ms (ActiveRecord: 0.0ms)
Started GET "/login" for 127.0.0.1 at 2017-10-17 06:59:26 +0000
Processing by SessionsController#new as HTML
Rendering sessions/new.html.erb within layouts/empty
Rendered sessions/new.html.erb within layouts/empty (1.1ms)
Completed 200 OK in 6ms (Views: 4.9ms | ActiveRecord: 0.0ms)
(0.4ms) ROLLBACK
:
는 그래서 테스트 로그 (docker-compose run web tail -f log/test.log
)
그리고 내가 발견하는 것은 저를 당혹 꼬리. 그러나 어떤 이유로 카피 바라 (Capybara)는 이메일/패스워드 매개 변수를 전달하면서 루트 URL을 얻으려고 시도했다. 루트 URL은 사용자가 액세스 할 수없는 LocationsController # 인덱스에 매핑되므로 get Please log in to see this page
메시지와 함께/login으로 리디렉션되었습니다. 이 버튼이 실제로하는 일은 SessionsController # create에 POST를 보내는 것입니다. 당신이 수동으로 할 때 로그를 보는 경우에, 그 일이 정확히 무엇을 : 당신이 버튼이 버튼을 클릭하면 완전히 다른 요청을 수행 누를 때
web_1 | Started POST "/sessions" for 172.18.0.1 at 2017-10-17 07:02:19+0000
web_1 | Processing by SessionsController#create as HTML
는
그 이유를 카피 바라에서 작동하지 않을 수 있습니다 수동으로.
대단히 감사합니다.
Urgh은 완전히 중첩 된 양식을 놓쳤습니다. 그래서 지금 당신은 그것을 지적하고 있습니다! 고마워, 또한 기능 대 사양 사양에 대한 귀하의 지적했다. –