أحاول اتباع المثال من الإصدار 1.7.1 ، حيث يمكنك استخدام regex لمطابقة عناوين url الديناميكية (هنا: https://www.relishapp.com/vcr/vcr/v/1-7-1/docs/cassettes / request-matching # use-a-regex-for-the-request-uri)
على سبيل المثال:
uri:! ruby / regexp / ^ http://bar.com/foo/
لكني أستخدم الإصدار 2.9.3 وعندما أقوم بتشغيل المواصفات التي تصل إلى الكاسيت ، أحصل على خطأ عنوان URL غير صالح.
هل لا يزال regex مدعومًا في الإصدارات الأحدث؟
لست متأكدًا مما إذا كان regex لا يزال مدعومًا ، فهل تحققت من مستندات 2.9.3؟
قد تحاول استخدام مُطابق طلب مخصص:
https://relishapp.com/vcr/vcr/v/3-0-1/docs/request-matching/register-and-use-a-custom-matcher
مرحبا،
لم أتمكن من رؤية أي ذكر لـ regex بعد تلك المستندات 1.7.1 ، لكن من المؤسف أن يتم حذفه لأنه مثالي لحالة الاستخدام الخاصة بنا.
لقد جربت المطابقة المخصصة وقد نجحت بالفعل مع عنوان url الديناميكي الذي كنت أرغب في مطابقته ، ولكن بعد ذلك استخدمت عناوين URL الأخرى التي كانت متشابهة أيضًا أداة المطابقة المخصصة ولكن لم تحصل على تطابق ... مسجلة ، مباريات في الكاسيت ...
تمت إزالته في 2.0. https://github.com/vcr/vcr/pull/470#issuecomment -69643361
نظرًا لأنه يمكنك استخدام regex في المطابق المخصص (أو أي رمز تريده حقًا) ، يجب أن تكون قادرًا على تحقيق نفس الوظيفة.
إذا كان بإمكانك مشاركة بعض التعليمات البرمجية ، فقد أحاول تقديم المزيد من المساعدة ، ولكن من الصعب تصحيح مشكلتك دون رؤية أي رمز.
شكرا جزيلا لمساعدتك في هذا ...
لقد قمت بإنشاء اثنين من المطابقات التي ستطابق مكالمات مختلفة في نفس تنفيذ أحد المواصفات:
c.register_request_matcher :stripe_random_customer_matcher do |request_1, request_2|
/^https:\/\/api\.stripe\.com\/v1\/customers\/cus_(\w){14}$/ === request_1.uri
end
أعتقد أن هذا يعمل ...
المطابق المخصص الآخر هو:
c.register_request_matcher :stripe_random_card_matcher do |request_1, request_2|
/^https:\/\/api\.stripe\.com\/v1\/customers\/cus_(\w){14}\/cards\/card_(\w){24}$/ === request_1.uri
end
الذي يطابق أي اتصال بـ: https://api.stripe.com/v1/customers/cus_14_random_chars/cards/card_24_random_chars
أجعلهم يعملون في نفس المواصفات مثل هذا:
VCR.use_cassette('user_changes_payment_details_1', :match_requests_on => [:method, :stripe_random_customer_matcher, :stripe_random_card_matcher]) do
...
ما يبدو أنه يحدث هو أن عنوان url المطلوب يطابق التعبير العادي في stripe_random_customer_matcher الذي يتم استدعاؤه أولاً ويعيد صحيحًا ، ثم يتم استدعاء stripe_random_card_matcher ويعيد القيمة false.
ثم تلقيت الخطأ من VCR:
Failure/Error: Unable to find matching line from backtrace
VCR::Errors::UnhandledHTTPRequestError:
An HTTP request has been made that VCR does not know how to handle:
أنا في حيرة من أمري ...
أعتقد أنه مقابل match_requests_on
، كل شيء أو لا شيء.
إذا فشل أحدهم ، فلن يتطابق وسيجمع VCR::Errors::UnhandledHTTPRequestError
.
إذا كنت ستستخدمهما معًا في نفس الوقت ، فربما يكون من الأسهل فقط دمج المطابقات في واحدة فقط ORs هما regexes ، لست متأكدًا على الرغم من ذلك.
c.register_request_matcher :stripe_random_customer_matcher do |request_1, request_2|
/^https:\/\/api\.stripe\.com\/v1\/customers\/cus_(\w){14}$/ === request_1.uri ||
/^https:\/\/api\.stripe\.com\/v1\/customers\/cus_(\w){14}\/cards\/card_(\w){24}$/ === request_1.uri
end