복붙노트

[RUBY-ON-RAILS] 억제 루비 경고 사양을 실행

RUBY-ON-RAILS

억제 루비 경고 사양을 실행

나는 내 사양을 실행할 때 루비 경고를 억제하는 방법을 찾고 있어요.

spec spec/models/account_spec.rb

나는 다음과 같은 경고가 나타납니다

DEPRECATION WARNING: ActiveSupport::Dependencies.load_paths is deprecated, ...
warning: already initialized constant SOME_CONSTANT_NAME

ActiveSupport 경고를 제거하면 ActiveSupport와 매우 쉽습니다 :: Deprecation.silenced 사실 =.

어떻게 사양 명령의 일환으로 이미 초기화 일정한 경고를 방지합니까? 또는 경고를 억제 할 수있는 또 다른 사양 파일을 만드는 과정. 이러한 경고는 보석 파일에서 있음을 알아 두셔야합니다 그러므로 나는 Kernel.silence_warnings로를 해당 파일로 이동 및 서라운드 수 없습니다.

노트 : 나는 억제 경고가 나쁜 것으로 알고 있습니다. 내가 정력 내에서 하나의 스펙을 실행할 때 경고가 내 화면을 어수선하지 않은 경우 그러나, 그것은 좋은 일 것입니다.

해결법

  1. ==============================

    1.대신 사양 래퍼의 루비 명령을 직접 사양을 실행하면 경고 침묵에 -W 명령 행 옵션을 사용할 수 있습니다 :

    대신 사양 래퍼의 루비 명령을 직접 사양을 실행하면 경고 침묵에 -W 명령 행 옵션을 사용할 수 있습니다 :

    $ ruby --help
    [...]
      -W[level]       set warning level; 0=silence, 1=medium, 2=verbose (default)
    

    귀하의 경우 이렇게 :

    $ ruby -W0 -Ispec spec/models/event_spec.rb
    

    당신에게 경고를 표시하지합니다.

    당신의 보석이로드되기 전에 (당신이 레일 3 인 경우 또는 application.rb) 또는, 당신은 당신의 environment.rb에의 상단에, 즉 $ VERBOSE = 전무를 설정할 수 있습니다. 참고이 모든 경고 모든 시간을 비활성화있다.

    당신이 레일을 사용하고 있기 때문에 또는, 당신은 당신이 Bundler 프로그램을 사용하는 경우 Bundler.require 블록 주위에 Kernel.silence_warnings을 사용할 수 있어야합니다 :

    Kernel.silence_warnings do
      Bundler.require(:default, Rails.env) if defined?(Bundler)
    end
    

    더 선택적으로 만 로딩 특정 보석에 대한 VERBOSE $를 설정합니다 :

    config.gem 'wellbehaving_gem'
    original_verbosity = $VERBOSE
    $VERBOSE = nil
    config.gem 'noisy_gem_a'
    $VERBOSE = original_verbosity
    
  2. ==============================

    2.RUBYOPT의 구문은

    RUBYOPT의 구문은

    RUBYOPT="-W0" rspec
    

    루비 2.1.x의 및 2.14.x에서 테스트

  3. ==============================

    3.레일 가이드에서 말했듯이 게시물과 관련, 당신은 당신이 작업하는 환경에 따라 중단 경고를 관리 할 수 ​​있습니다 :

    레일 가이드에서 말했듯이 게시물과 관련, 당신은 당신이 작업하는 환경에 따라 중단 경고를 관리 할 수 ​​있습니다 :

    로그 :에 대해 stderr : 그래서 그냥 설정 / 환경 / test.rb 값을 변경

    Rails.application.configure do
       ...
       # Print deprecation notices to the log file instead of console.
       config.active_support.deprecation = :log
       ...
    end
    

    그리고이 변화, 사용 중단 경고는 이제 로그 / test.log 대신 콘솔 출력에 인쇄됩니다.

  4. ==============================

    4.또한 RSpec을 위해 -W0를 전달하는 "RUBYOPT"환경 변수를 사용할 수 있습니다 :

    또한 RSpec을 위해 -W0를 전달하는 "RUBYOPT"환경 변수를 사용할 수 있습니다 :

    RUBYOPT=W0 rspec spec/models/event_spec.rb
    

    이것은 당신이 디렉토리에 전달하여 여러 사양을 실행할 수 있습니다

    RUBYOPT=W0 rspec spec/models
    
  5. ==============================

    5.RSpec에 당신이 사용할 수있는 태그 옵션이 있습니다 - 단순히을 / dev / null을 사용했다.

    RSpec에 당신이 사용할 수있는 태그 옵션이 있습니다 - 단순히을 / dev / null을 사용했다.

    rspec spec --deprecation-out /dev/null
    
  6. ==============================

    6.당신은 당신의 .rspec 파일 삭제이있는 경우

    당신은 당신의 .rspec 파일 삭제이있는 경우

    --warnings
    

    프로젝트 루트에 .rspec 파일에서.

  7. ==============================

    7.나를 위해 일한 유일한 해결책은 내 설정 / 환경 / test.rb 파일의 상단에 $ VERBOSE = 전무를 추가하는 것입니다

    나를 위해 일한 유일한 해결책은 내 설정 / 환경 / test.rb 파일의 상단에 $ VERBOSE = 전무를 추가하는 것입니다

      Rails.application.configure do
       $VERBOSE = nil
    

    나는 사기꾼 경고 문제 사기꾼-1.9.6 / lib 디렉토리 / 사기꾼 / 기본 / number.rb 함께 해요 : 34. 이 지역의 다른 모든 경고를 숨 깁니다 때문에 사용합니다.

  8. ==============================

    8.사실, 아마 당신은 당신의 경고를 무시해서는 안하지만 있어야 할 것 어디에 있는지 그들이 해고하기 위해 그들을 테스트합니다.

    사실, 아마 당신은 당신의 경고를 무시해서는 안하지만 있어야 할 것 어디에 있는지 그들이 해고하기 위해 그들을 테스트합니다.

    그것은 사용하기 쉬운 아니지만, 그것은 다음과 같습니다 :

    obj.should_receive(:warn).with("Some Message")
    

    난 여기가 발견, 내 사용 사례에 대해 그것을 테스트하고 그것을 작동합니다 (및 경고는 물론, 콘솔에서 사라)

  9. ==============================

    9.당신은 시험을 위해 경비를 사용하고 6 레일과 같은 경고를받을 경우 : - "경고 : 평가에서 FILE 바인딩의 위치를 ​​반환하지 않을 수 있습니다" - "경고 : Proc.new를 사용하여 주어진 블록을 캡처가되지 않습니다 대신 사용 및 블록" - "경고 : 키워드 매개 변수로 마지막 인수를 사용하여 더 이상 사용되지 않습니다, 어쩌면 ** 호출에 추가해야합니다"

    당신은 시험을 위해 경비를 사용하고 6 레일과 같은 경고를받을 경우 : - "경고 : 평가에서 FILE 바인딩의 위치를 ​​반환하지 않을 수 있습니다" - "경고 : Proc.new를 사용하여 주어진 블록을 캡처가되지 않습니다 대신 사용 및 블록" - "경고 : 키워드 매개 변수로 마지막 인수를 사용하여 더 이상 사용되지 않습니다, 어쩌면 ** 호출에 추가해야합니다"

    그리고 유일한 방법은 그래서 모두가하는 것입니다 제거 :

    나는이, 그래서 나중에 모든 경고를 제거하는 몇 가지 보석 업데이트 후, 우리는 우리가 예를 들어 자신의 코드 사용에 적절한 경고를받을 정도로 다시 그 라인을 제거해야 좋은 충고 아닌 것 같아요.

  10. ==============================

    10.경고 퍼팅 : = 거짓 후 필요 [되지] "레일을 / 모든"설정 / application.rb 사방 그 경고를 억제하기 위해 아주 잘 작동합니다. 넌 할 수있어

    경고 퍼팅 : = 거짓 후 필요 [되지] "레일을 / 모든"설정 / application.rb 사방 그 경고를 억제하기 위해 아주 잘 작동합니다. 넌 할 수있어

    Warning[:deprecated] = false if Rails.env.test?
    

    특정 경우에, 또는 더 나은 아직 - 설정 / 환경 / test.rb에 넣어,하지만 확실히 내가 몇 가지 물건이 그 전에로드 보라 이후 직장에가는 방법을 잘 모르겠어요.

  11. from https://stackoverflow.com/questions/5591509/suppress-ruby-warnings-when-running-specs by cc-by-sa and MIT license