使用VCR过滤敏感数据后,重新运行规范失败,并显示错误的URI错误

时间:2016-04-26 14:53:34

标签: ruby-on-rails rspec rspec-rails vcr

根据我在这里阅读的内容:https://relishapp.com/vcr/vcr/v/1-11-3/docs/configuration/filter-sensitive-data

  

重播交互时,敏感文本将替换   替换字符串,以便交互将是相同的   最初录制的。

我的vcr_setup.rb文件如下所示:

require 'vcr'

VCR.config do |c|
  c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
  c.stub_with :fakeweb
  c.default_cassette_options = { :record => :once }

  c.filter_sensitive_data("<DOMAIN>") do |interaction|
     interaction.request.uri.split(":")[1][2..-1]
   end

   c.filter_sensitive_data("<PASSWORD>") do |interaction|
     interaction.request.uri.split(":")[2].split("@")[0]
   end
end

interaction.request.uri看起来像这样(替换了敏感信息):

"https://<my_secret_domain>:<my_secret_password>@services.someprovider.com:443/enterprise/composite/some_api_call"

第一次运行我的rspec测试后,磁带正确地显示了这个:

uri: https://<DOMAIN>:<PASSWORD>@services.someprovider.com:443/enterprise/composite/some_api_call

然而,当我尝试再次运行测试时,我收到此错误:

Failure/Error: VCR.use_cassette("#{provider_name}_mail_dispatcher_points_already_awarded", record: :all) do
 URI::InvalidURIError:
   bad URI(is not URI?): https://<DOMAIN>:<PASSWORD>@services.someprovider.com:443/enterprise/composite/some_api_call
 # ./spec/models/mail_dispatcher_spec.rb:130:in `block (3 levels) in <top (required)>'

这与文件中的上段相反。我究竟做错了什么?

提前感谢您的帮助。

路易丝

1 个答案:

答案 0 :(得分:0)

filter_sensitive_data是两种方法的包装:before_recordbefore_playback。我能够使用这些方法在交互中查找和替换用户名和密码 - 第一个在写入YAML文件之前,第二个在重新运行测试之前播放卡带之前。

此链接:https://groups.google.com/forum/#!searchin/vcr-ruby/sensitive/vcr-ruby/uSm8HDBiWYw/OWIJk2_krVMJ,尤其是来自Myron Marston的评论,提供了一个粗略的轮廓,然后我修改了以适合我的特定API调用。