문제

최신 안정 버전을 복제 한 후

깨끗한 레일 응용 프로그램과 다음 (내가 믿는 것) 각 플러그인에 대한 모든 지침에 대해 오이 스토리는 여전히 실패합니다 .-(. 여기에 문제의 요약이 있습니다.

  1. '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''
    
  2. 이야기는 말합니다 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이 파손 되었습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top