Vcr: استخدام Regex مع الإصدار 2.9.3

تم إنشاؤها على ٢٥ أبريل ٢٠١٦  ·  5تعليقات  ·  مصدر: vcr/vcr

أحاول اتباع المثال من الإصدار 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 مدعومًا في الإصدارات الأحدث؟

ال 5 كومينتر

لست متأكدًا مما إذا كان 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
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

majioa picture majioa  ·  7تعليقات

mpalmujoki picture mpalmujoki  ·  11تعليقات

zuk picture zuk  ·  9تعليقات

axsuul picture axsuul  ·  13تعليقات

rweng picture rweng  ·  6تعليقات