restful_authentication 및 오이로 이야기를하는 방법은 무엇입니까?
-
22-08-2019 - |
문제
최신 안정 버전을 복제 한 후
- 울타리 (2.3.2),
- RSPEC (1.2.2),
- 오이 (0.2.0.4 ... 2009-03-24에서 나왔습니다),
- RSPEC-RAILS (1.2.2),
- 편안한 인증 (고정 Formatted_user_Path 및 기타 몇 가지 문제),
- Webrat,
- 루바이저-아아아아 그 아아아아 (그리고 다른 사람들)
깨끗한 레일 응용 프로그램과 다음 (내가 믿는 것) 각 플러그인에 대한 모든 지침에 대해 오이 스토리는 여전히 실패합니다 .-(. 여기에 문제의 요약이 있습니다.
- 'map.root : controller => "my_controller"'경로를 만들었음에도 불구하고 배트에서 바로 작동하지 않습니다.
expected redirect to "/", got no redirect (Spec::Expectations::ExpectationNotMetError) /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations.rb:57:in `fail_with' /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations/handler.rb:14:in `handle_matcher' /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb:31:in `should'. /features/step_definitions/user_steps.rb:111:in `/^an? (.*) user named '(.*)'$/' features/sessions.feature:25:in `And an activated user named 'reggie''
- 이야기는 말합니다
logged_in?
방법은features/step_definitions/ra_env.rb
파일 호출 :ApplicationController.send(:public, :logged\_in?, :current\_user, :authorized?)
그 호출은 스터브가 필요하지 않고 해당 방법을 사용할 수 없습니까?
아, 그리고 나는 Autospec을 실행하려고합니다. 그래서 나는 그것을 시작하기 위해 다음 명령을 수행했습니다.
export AUTOFEATURE=true rake spec:server:start ruby script/autospec
해결책
나는 약간의 연구를했고 여기에 내가 얻은 것이 있습니다. 그만큼 ra_response_steps.rb
리디렉션이 원유가 올 것으로 예상 된 다음 리디렉션을 정의하는 이야기를 따라야합니다. Webrat 세션 구현에는 다음 코드가 있기 때문에 이는 실패합니다.
def request_page(url, http_method, data) #:nodoc: h = headers h['HTTP_REFERER'] = @current_url if @current_url debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}" if h.empty? send "#{http_method}", url, data || {} else send "#{http_method}", url, data || {}, h end save_and_open_page if exception_caught? && Webrat.configuration.open_error_files? raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code? reset @current_url = url @http_method = http_method @data = data if internal_redirect? check_for_infinite_redirects request_page(response_location, :get, {}) end return response end
주목하십시오 if internal_redirect? ... end
. Webrat가 리디렉션을 따르고 있기 때문에 테스트가 실패하는 경우입니다. 해결 방법으로 Webrat 세션에 해당 라인을 주석 할 수 있지만 이것은 아마도 괜찮은 솔루션이 아닙니다. 조금 더 일하고 어딘가에 패치를 게시 할 것입니다.
다른 팁
이 블로그 게시물을 찾았습니다.이 블로그 게시물은 문제의 요점을 잘 설명했습니다.
http://blog.andrew.premdas.org/articles/2008/10/15/webrat-visits-and-redirects
기본적으로 Restful Authentication Test는 Webrat을 사용하여 테스트해서는 안되는 것을 테스트하려고합니다. 따라서 위에서 권장하는 변경 사항은 아마도 변경되어야한다고 생각하는 것과 반대입니다.
리디렉션을 테스트하지 않고 끝나는 페이지를 테스트 할 수 있도록 RESTFul 인증 테스트를 변경했습니다. 그러나 내가 이해하지 못하는 특정 리디렉션에는 여전히 문제가있는 것 같습니다.
Then she should be at the new session page # features/step_definitions/ra_response_steps.rb:15
expected "session/new", got redirected to "http://www.example.com/session/new" (Spec::Expectations::ExpectationNotMetError)
이 example.com이 어디에서 왔는지 이해가 안 돼요. 다른 사람이 비슷한 오류가 있습니까?
user_steps.rb에서 로그 아웃 함수의 정의를 다음과 같이 변경해야했습니다.
def log_out
'/로그 아웃 얻기'
끝
기본 경로를 제거하지 않는 경우에만 존재하는 '/세션/파괴'를 얻으려고하기 전에.
또한 Application_Controller에 "AuthenticatedSystem을 포함"해야합니다.
그래도 여전히 다른 문제를 통해 싸우고 있습니다 ...
"보호 된 방법"문제에 관해서는 Autospec을 사용하지 않고 config.cache_classes = true를 남기면 테스트가 통과된다는 것을 알았습니다.
config.cache_classes = false를 켜면 오류가 다시 발생합니다.
문제는 클래스 캐싱이 레일에서 구현되는 방식 또는 RSPEC가 생성 된 클래스를 관리하는 방법에 관한 것 같습니다. 불행히도 나는 이것을 전체 로그를 더 조사 할 자원이 없으며, 다음과 같은 것에 대한 좋은 토론이있는 것으로 보입니다.http://groups.google.com/group/roup/rpec/browse_thread/500ede090bd08996/25a3d9a7d283696b?lnk=gst&q=cache_crasses#25a3d9a7d283696b
나는 제공 할 지침이 많지 않습니다. 동정심만으로도 최근에 같은 문제를 다루는 데 몇 시간을 보냈습니다. 위쪽에서는 rspec을 배운 방법입니다.
내가 찾은 한 가지는 많은 실패가 내가 어쨌든 바꾸고 싶었던 것들이라는 것입니다.
결국, 대부분의 실패는 해결하기가 간단했습니다.
나는 같은 문제를 해결하고 있습니다. 아직 거기에 없지만 ApplicationController.send (: public, : logged_in?, : current_user, : forgerized?)는 대신 지원/env.rb로 가야한다고 생각합니다.
언급 된 오류도 얻습니다. 그러나 내 앱에서 발생하는 첫 번째 문제는 다음과 같습니다.
다중 단계 정의는 동일한 regexp입니다.
특징/step_definitions/user_steps.rb : 16 : in /^(.*) (.*) user named '(.*)'$/'
features/step_definitions/user_steps.rb:29:in
/^(. *) 사용자 이름이 없습니다 '(. *)'$/'
(오이 :: 중복)
물론, 나는 이것을 고칠 수 있지만, 더 많은 오류가 따를 것입니다 (컨트롤러의 보호 된 logged_in? 메소드, 실패한 RSPEC 등).
우리 모두가 근본적으로 잘못된 일을하는지 아는 사람이 있습니까? 아니면 현재 릴리스에서 restful_authentication이 파손 되었습니까?