2016-08-29 3 views
9

Aruba를 사용하여 여러 명령 줄 응용 프로그램을 테스트하는 Bundler를 통해 실행되는 RSpec 제품군이 있습니다. 그것은 잘 작동합니다 ... 테스트중인 명령 자체가 Bundler를 사용하여 Ruby로 작성되지 않은 한. 하지만 RSpec suite의 bundler config가 Bundler를 사용하는 명령의 실행을 방해하지 못하게하는 방법을 알아낼 수는 없습니다. 적어도 극단적 인 조치는 필요하지 않습니다.Aruba 및 Bundler로 Ruby 기반 CLI 테스트

unset_bundler_env_varswith_clean_env의 다양한 순열을 사용해 보았습니다. 여기에 내가 일 것이라고 생각하는 기술의 예

나는 또한 with_clean_env없이 unset_bundler_env_vars을 시도
describe 'my ruby app' do 
    before :each { unset_bundler_env_vars } 
    it 'should work' do 
    Bundler.with_clean_env { run_simple ruby_command_name } 
    end 
end 

, 그 반대는 경우에 서로 방해. 주사위가 없다.

나는 그것이 작동 왔 유일한 방법은 다음과 같이 수동으로 환경 아루바의 사본을 마사지하는 것입니다

before :all do 
    aruba.environment.tap do |env| 
    if env.include? 'BUNDLE_ORIG_PATH' then 
     env['PATH'] = env['BUNDLE_ORIG_PATH'] 
     %w(BUNDLE_BIN_PATH BUNDLE_GEMFILE BUNDLE_ORIG_PATH GEM_HOME RBENV_DIR 
     RBENV_HOOK_PATH RUBYLIB RUBYOPT).each do |key| 
     env.delete key 
     end 
    end 
    end 
end 

더 나은 방법이 있어야합니다. 테스트 스위트 나 테스트중인 명령 모두는 다른 언어가 쓰여진 언어를 알고 있거나 신경 쓰지 않아야합니다. 그리고 Aruba와 Bundler를 사용하는 테스트 코드는 프로세스 환경에 미치는 영향에 대한 세부 정보를 알 필요가 없습니다.

그래서 내가 뭘 잘못하고 있니? 어떻게해야합니까?

+1

가드 안에 테스트 파일이있는 테스트 도구가 실행 중입니다. 차라리 짜증나는 솔루션을 얻길 바랍니다! – jedifans

답변

1

unset_bundler_env_varsis deprecated처럼 보이며 delete_by_environment_variable으로 바뀌며 문자열 매개 변수 (source)가 필요합니다.

당신의 사양에 before :each { delete_environment_variable('BUNDLE_GEMFILE') }을 시도해보십시오. 그래도 작동하지 않으면 각 변수를 삭제하려면 PATH 변수 목록을 반복해야합니다.

지원 중단 알림에는 해결 방법이 있지만 앞으로 어떻게 나아질 지 잘 모르겠습니다.

unset_bundler_env_vars 
aruba.environment.clear.update(ENV) 

희망이 있습니다.

+0

도움에 감사드립니다. 불행하게도, BUNDLER_GEMFILE을 해제하는 것만으로는 충분하지 않을 것 같습니다. 특히 PATH를 수정하는 경우에는 그렇지만,'delete_environment_variable'은'aruba.environment'를 수동으로 파킹하는 것보다 더 깨끗해 보입니다. –