首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Aruba和Bundler测试基于Ruby的CLI

使用Aruba和Bundler测试基于Ruby的CLI
EN

Stack Overflow用户
提问于 2016-08-30 04:50:53
回答 1查看 186关注 0票数 9

我有一个通过Bundler运行的RSpec套件,它正在使用Aruba测试许多不同的命令行应用程序。它工作得很好。只要被测试的命令本身不是使用Bundler用Ruby编写的。但是我想不出如何防止RSpec套件的绑定器配置干扰本身使用绑定器的命令的执行-至少在没有极端措施的情况下是这样。

我尝试了unset_bundler_env_varswith_clean_env的各种组合,但都没有用。这里有一个我认为可行的技术的例子:

代码语言:javascript
复制
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

我还尝试了不带with_clean_envunset_bundler_env_vars,反之亦然,以防它们相互干扰。没有骰子。

我让它工作的唯一方法是手动处理Aruba的环境副本,如下所示:

代码语言:javascript
复制
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的测试代码不需要知道bundle exec如何影响进程环境的细节。

那么我到底做错了什么呢?我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-21 01:35:16

它看起来像unset_bundler_env_vars is deprecated,并被需要字符串参数(source)的delete_by_environment_variable所取代。

您可以在您的规范中尝试before :each { delete_environment_variable('BUNDLE_GEMFILE') }。如果这不起作用,您可能需要遍历PATH变量列表以删除每个变量。

在弃用通知中,有一个变通方法,尽管我不确定它会有多脆弱。

代码语言:javascript
复制
unset_bundler_env_vars
aruba.environment.clear.update(ENV) 

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39214985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档