في الأسلوب الذي يسمى بالتوقعات المزدوجة حول الحجة

StackOverflow https://stackoverflow.com//questions/25010425

  •  20-12-2019
  •  | 
  •  

سؤال

لقد قمت بإنشاء مزدوج، وأقوم بتنفيذ تعليمات برمجية ستستدعيه بطريقة وتجزئة ضخمة كوسيطة، وأريد التحقق من مفتاح واحد للوسيطة، ثم إرجاع تجزئة محددة.

هذا ما أفعله

before :each do
  allow(@my_double).to receive(:do_stuff).and_return({stuff: 42})
end
it "can do stuff" do
  expect(@my_double).to receive(:do_stuff) do  |arg|
    expect(arg).to be_a(Hash)
    expect(arg[:my_arg]).to eq(3)
  end
  TestObject.stuff() # will invoke do_stuff on the double
end

ما يحدث هو المرة الأولى do_stuff يسمى، فإنه يعود true والتي هي نتيجة receive block، ولكن في المكالمات اللاحقة (التي تم اختبارها في الاختبار) يتم إرجاعها بشكل صحيح {stuff: 42} ولكن بما أن المكالمة الأولى كانت خاطئة، فإن طريقتي تستثنى عندما تحاول الاتصال[:stuff] على العودة.

أحاول السماح allow حدد سلوك المضاعفة لذلك لا أريد أن أضع العائد في الجزء السفلي من expect..ولكن هل هناك أي طريقة حول هذا الموضوع؟

هل كانت مفيدة؟

المحلول

أحسب أن الجواب هو استخدام حتى الآن مُطابق الوسيطة غير الموثقة hash_including يشبه إلى حد كبير تعليقي الأول

expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))

هذا يعمل بشكل جيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top