rspec, factory_girl & capybara로 통합 테스트를 작성하려고합니다. 나는 또한 오이를 설치했지만, 나는 그것을 (내 지식에) 사용하지 않고있다.Rspec & Capybara를 사용한 레일 3의 세션 테스트
기본적으로 내 사용자에게 db를 미리 채우고 싶습니다. 그런 다음 내 홈 페이지로 이동하여 로그인을 시도하십시오. user_path (@user)로 리디렉션해야합니다.
그러나 세션은 my/rspec/requests/integration 테스트에서 지속되지 않는 것처럼 보입니다.
내 사양 : /rspec/requests/users_spec.rbrequire 'spec_helper'
describe "User flow" do
before(:each) do
@user = Factory(:user)
end
it "should login user" do
visit("/index")
fill_in :email, :with => @user.email
fill_in :password, :with => @user.password
click_button "Login"
assert current_path == user_path(@user)
end
end
반환 대신
Failures:
1) User flow should login user
Failure/Error: assert current_path == user_path(@user)
<false> is not true.
# (eval):2:in `send'
# (eval):2:in `assert'
# ./spec/requests/users_spec.rb:16
, 내 please_login_path로 리디렉션 - 로그인이 어떤 이유로 실패 할 경우 (발생해야하는 또는 [: user_id] 세션이 설정되지 않은 경우).
session.inspect를 넣으 려하면 nil 객체로 실패합니다. 내가 컨트롤러 테스트 (/rspec/controllers/sessions_spec.rb)에서이 작업을 수행하려고하면
, 나는 문제없이 세션에 액세스 할 수 있습니다, 나는 세션 호출 할 수 있습니다 [이 : USER_ID] 당신이 경우
관련이 있는지는 잘 모르겠지만 @ user.password를 입력하여 사용자의 암호를 가져 오면 안됩니다. 이는 앱의 보안 취약점입니다. 암호를 일반 텍스트로 저장 하시겠습니까? –
그것은 관련이 없으며 아마도 보안 취약점이 아닙니다. #password를 호출하면 Factory 변수로 인스턴스 변수에 설정되기 때문에 암호 만 반환됩니다. 아마도 그는 Devise 나 그와 비슷한 암호 특성을 db에 일반 텍스트로 저장하지 않을 가능성이 높기 때문에 그 인스턴스 변수를 사용할 수 없게 될 것입니다. –