با استفاده از RSpec در زبان Ruby یک تست بنویسید که رفتار کلاس OrderNotifier را هنگام ارسال اعلان سفارش بررسی کند به طوری که ارسال ایمیل یا فراخوانی سرویس خارجی با mock و stub شبیهسازی شود بدون اینکه درخواست شبکهای واقعی انجام شود.
17.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 01:50 0.0
برای حل این مسئله یک مثال ساده از کلاس OrderNotifier بسازید که برای ارسال اعلان از یک Mailer یا سرویس HTTP خارجی استفاده میکند، سپس با استفاده از rspec-mocks (یا کتابخانههایی مثل WebMock برای درخواستهای HTTP) فراخوانی خارجی را stub یا mock کنید؛ از allow(...).to receive(...).and_return(...) برای جایگزینی رفتار و از expect(...).to receive(...) برای بررسی اینکه متد مورد نظر با پارامترهای درست فراخوانی شده استفاده کنید. نکات: تستها باید مستقل از شبکه باشند، پارامترهای ارسالی (مثل بدنه ایمیل یا JSON) را assert کنید، و از before hooks برای آمادهسازی stubها استفاده کنید تا کد تست خواناتر و قابل نگهداری بماند.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای تست رفتار OrderNotifier با ایمیل یا سرویس HTTP خارجی، دو مسیر را جدا از هم با mocks/stubs جایگزین کنید تا هیچ تماس شبکهای انجام نشود. با استفاده از before(:each) میتوانید بدنه ایمیل یا JSON را با allow(...).to receive(...).and_return(...) ست کنید تا بتوانید پارامترهای ارسالشده را assert کنید. برای اطمینان از فراخوانی صحیح، از expect(...).to receive(...).with(...) استفاده کنید و در صورت نیاز از have_received برای تأیید فراخوانیها در نمونههای جداگانه استفاده کنید. اگر از WebMock استفاده میکنید، فقط درخواستهای HTTP را stub کنید و به جای آن از doubles برای کلاسهای ارسال اعلان بهره ببرید تا تستها مستقل، پایدار و سریع باشند.
گزارش