Nis*_*rma 2 rspec ruby-on-rails-3 capybara-webkit selenium-webdriver vcr
我正在使用Rspec与Capybara运行使用VCR gem的集成测试来模拟存根api请求.我面临着各种奇怪的问题.测试第一次成功运行并创建yaml文件以保存请求及其响应.但是如果我在创建yaml文件后再次运行测试,那么它会遇到问题并显示以下问题: -
F
Failures:
1) AffiliateSignUpProcesses Sign up using affiliate link should create User/Affiliate/AffiliateToken and Conversion when user is created
Failure/Error: visit pricing_path(:aid => 'this_is_sample_value')
VCR::Errors::UnhandledHTTPRequestError:
================================================================================
An HTTP request has been made that VCR does not know how to handle:
GET http://127.0.0.1:58021/__identify__
VCR is currently using the following cassette:
- /home/pcname/appname/selenium-error/fildername/appaname/cassettes/acceptanceTest/AffiliateSignUpProcess.yml
- :record => :once
- :match_requests_on => [:method, :uri]
Under the current configuration VCR can not find a suitable HTTP interaction
to replay and is prevented from recording new requests. There are a few ways
you can deal with this:
* If you're surprised VCR is raising this error
and want insight about how VCR attempted to handle the request,
you can use the debug_logger configuration option to log more details [1].
* You can use the :new_episodes record mode to allow VCR to
record this new request to the existing cassette [2].
* If you want VCR to ignore this request (and others like it), you can
set an `ignore_request` callback [3].
* The current record mode (:once) does not allow new requests to be recorded
to a previously recorded cassette. You can delete the cassette file and re-run
your tests to allow the cassette to be recorded with this request [4].
* The cassette contains 64 HTTP interactions that have not been
played back. If your request is non-deterministic, you may need to
change your :match_requests_on cassette option to be more lenient
or use a custom request matcher to allow it to match [5].
[1] https://www.relishapp.com/vcr/vcr/v/2-4-0/docs/configuration/debug-logging
[2] https://www.relishapp.com/vcr/vcr/v/2-4-0/docs/record-modes/new-episodes
[3] https://www.relishapp.com/vcr/vcr/v/2-4-0/docs/configuration/ignore-request
[4] https://www.relishapp.com/vcr/vcr/v/2-4-0/docs/record-modes/once
[5] https://www.relishapp.com/vcr/vcr/v/2-4-0/docs/request-matching
================================================================================
# ./spec/acceptance/affiliate_sign_up_processes_spec.rb:8:in `block (4 levels) in <top (required)>'
# ./spec/acceptance/affiliate_sign_up_processes_spec.rb:6:in `block (3 levels) in <top (required)>'
Finished in 2.42 seconds
1 example, 1 failure
Run Code Online (Sandbox Code Playgroud)
以下是我的vcr.rb: -
VCR.configure do |c|
c.allow_http_connections_when_no_cassette = true
c.hook_into :fakeweb
c.cassette_library_dir = 'cassettes'
end
Run Code Online (Sandbox Code Playgroud)
我的集成测试: -
需要'spec_helper'
describe "AffiliateSignUpProcesses", :js => true do
describe "Sign up using affiliate link" do
it "should create User/Affiliate/AffiliateToken and Conversion when user is created" do
VCR.use_cassette("acceptanceTest/AffiliateSignUpProcess", :record => :once) do
visit pricing_path(:aid => 'this_is_sample_value')
@email="static_for_vcr@testdomain.com"
#and other code
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
实际上它正在考虑所有localhost请求"访问"作为api调用.所以只需要通过忽略"localhost"请求来修复它们.Simpley在vcr.rb文件中写下以下内容
c.ignore_localhost = true
Run Code Online (Sandbox Code Playgroud)
在这里找到它: - https://makandracards.com/ninjaconcept/tags/javascript?switch_to=pane
更详尽: - https://www.relishapp.com/vcr/vcr/v/2-3-0/docs/configuration/ignore-request
| 归档时间: |
|
| 查看次数: |
2138 次 |
| 最近记录: |