أهلا،
أحاول إعداد مثال أساسي ولكن يبدو أنني أخفق في الحصول على WebMock لإيقاف طلبات GET التي يحاول المثال الخاص بي تقديمها.
أنا أستخدم نظام التشغيل Mac OS X ( 10.11.5
) مع إصدار Ruby بخلاف النظام 2.1.2
(تم ضبطه بواسطة rbenv
).
تبدو حالة الاختبار المصغرة الخاصة بي كما يلي:
require "webmock"
require "faraday"
require "pry"
endpoint = "http://www.beepbeepbeepboop.com"
WebMock.stub_request(:any, endpoint).to_return(:body => "foobar")
uri = URI.parse(endpoint)
http = Net::HTTP.new(uri.host)
http.get(uri.request_uri) # SocketError: getaddrinfo: nodename nor servname provided, or not known
f = Faraday.new(nil, nil)
f.get endpoint # Faraday::ConnectionFailed: getaddrinfo: nodename nor servname provided, or not known
p "done"
ملاحظة: لقد حاولت تبديل ترتيب
require "webmock"
وrequire "faraday"
لكن ذلك لم يحدث فرقًا في النتيجة
لقد قمت بإيقاف " http://www.beepbeepbeepboop.com " مع استجابة foobar وقمت بتقديم طلبات إلى Google.
require 'webmock'
لم يقم بتمكينه منذ الإصدار 2.0.0
يجب عليك إضافة WebMock.enable!
آها ، هناك نذهب WebMock.enable!
فعل الحيلة 👍 شكرًا لك
bblimke شكرا جزيلا. أنا في حيرة من أمري حقًا لماذا كانت هناك حاجة إلى ذلك.
لم ينجح هذا الاختبار بسبب عدم قيام كعب الروتين بإثارة الاستثناء كما هو متوقع:
before do
stub_request(:post, url)
.with(http_params)
.to_raise(Faraday::ConnectionFailed)
end
it { is_expected.to raise_error(MyCustomError) }
ولكن بعد إضافة WebMock.enable!
إلى rails_helper.rb
، عملت بشكل جيد. ما يحيرني هو أنني أستخدم WebMock في كل مكان في اختباراتي وكان يعمل بشكل جيد هناك ، فهل من المحتمل أن يكون هذا خطأ في WebMock؟
في كلتا الحالتين ، إنه يعمل ، لذا فأنا سعيد ، لكن لدي فضول لماذا احتاج إلى مكالمة صريحة لتمكين WebMock على الرغم من أن البذرات الأخرى تعمل بشكل جيد على ما يبدو. شكرا جزيلا على كل حال!
bobf أعتقد أنك تحتاج إلى "webmock / rspec" الذي يستدعي المكالمات Webmock.enable!
لست متأكدًا من المواصفات الفردية الخاصة بك حيث يمكن أن تكون مرتبطة بمشروعك. إذا كنت قادرًا على استخراج الكود إلى مشروع نموذجي لإعادة إنتاجه ، فيمكنني إلقاء نظرة عليه.
التعليق الأكثر فائدة
require 'webmock'
لم يقم بتمكينه منذ الإصدار 2.0.0يجب عليك إضافة
WebMock.enable!