2013-02-14 26 views
3

您好我正在嘗試使用帶標記的vcr的黃瓜測試google auth。vcr不知道如何處理此請求

一切都很好,直到令牌過期。我認爲,當期滿發生這種情況

enter image description here

但是我有一個文件與此內容

http_interactions: 
- request: 
    method: post 
    uri: https://accounts.google.com/o/oauth2/token 
    body: 

如果我允許VCR錄製新的請求爲該盒變化的內容。我不明白爲什麼,如果方法和uri不將POST更改爲https://accounts.google.com/o/oauth2/token

我改變標籤記錄新劇集,現在測試正在通過...我很無能。

我再次運行測試,現在我有這個當POST到令牌網址正在做:

Completed 500 Internal Server Error in 449ms 

Psych::BadAlias (Unknown alias: 70317249293120): 
+0

類似的事情是發生在我身上......我認爲這與刷新辦令牌。當使用oauth時,你有一個令牌,可能已過期(或沒有)。如果您運行測試並且標記是新鮮的,則不會調用該請求。但是,如果令牌已過期,則必須刷新它,因此vcr會引發錯誤...我不確定如何解決此問題。我會繼續調查。你解決了這個問題嗎? – iwiznia 2014-03-12 19:42:26

回答

1

也許你有門柱內側一些參數,這對於每一個請求有什麼不同?如果是這樣,您可以通過將match_requests_on: [:method, VCR.request_matchers.uri_without_params("your_param")]添加到VCR配置中來告訴VCR忽略此參數。

深入分析您的請求,並找出哪些參數正在改變。你可以告訴錄像機也匹配其他標準,看看這裏https://www.relishapp.com/vcr/vcr/v/2-4-0/docs/request-matching

+0

據我記憶,我有'match_requests_on [:method,:url]''。沒有參數在那裏。謝謝 – juanpastas 2013-04-30 14:33:35

1

好吧,這是一個解決方案... 問題來了,正如我在評論中所說,刷新令牌。當使用oauth時,你有一個令牌,可能已過期(或沒有)。如果您運行測試並且標記是新鮮的,則不會調用該請求。但是,如果令牌已過期,則必須刷新它,因此vcr會引發錯誤。 爲了解決這個問題,我所做的就是刷新令牌URL添加到VCR的忽略請求:

VCR.configure do |c| 
    c.cassette_library_dir = 'fixtures/vcr_cassettes' 
    c.hook_into :webmock # or :fakeweb 
    c.ignore_request {|request| request.uri == 'https://accounts.google.com/o/oauth2/token' } 
end 

這不是最好的解決辦法,因爲有時令牌被在測試中刷新...但它是最好的解決方案,我可以找到...

0

我得到相同的URL相同的問題。對我來說,問題在於我的代碼試圖多次向https://accounts.google.com/o/oauth2/token發起相同的調用。

一位在VCR錯誤消息給出可能的解決方法告訴您的解決方案:

的磁帶包含這一要求相匹配的HTTP交互,但它已經被播放。如果你希望允許多次播放了一個HTTP互動活動,設置:allow_playback_repeats磁帶選項

在我的情況下,添加此選項解決了這一問題,因爲它告訴VCR恢復到它的1.x不重新記錄重複請求的功能,而只是回放先前記錄的重複請求的結果。

我用的黃瓜,所以我的解決辦法是添加以下到我的features/support/vcr.rb

VCR.cucumber_tags do |t| 
    t.tag '@vcr', use_scenario_name: true 
    t.tag '@new_episodes', record: :new_episodes 
    t.tag '@allow_playback_repeats', use_scenario_name: true, allow_playback_repeats: true, record: :new_episodes 
end 

通知的@allow_playback_repeats標籤。我只是標籤我的情況與此代碼,一切工作正常之後:

@allow_playback_repeats 
Scenario: Uploading a video initiates an upload to YouTube 

請注意,如果您同時指定@vcr@allow_playback_repeats這是行不通的。

如果您使用RSpec的,你需要的解決做出相應的調整,但是,它should be as simple as

it "does something", :vcr => { allow_playback_repeats: true } do 
    ... 
end