আরএসপেক-এ কীভাবে আরও "বার বার" রিসিভ করা উচিত


112

আমার পরীক্ষায় এটি আছে

Project.should_receive(:find).with(@project).and_return(@project)

কিন্তু যখন অবজেক্টটি এই পদ্ধতিটি দুটি বার কল করে, আমাকে করতে হবে

Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)

কীভাবে কিছু বলার উপায় আছে

Project.should_receive(:find).with(@project).and_return(@project).times(2)

উত্তর:


214

এটি পুরানো। নীচে উরির উত্তরটি পরীক্ষা করুন

2 বার জন্য:

Project.should_receive(:find).twice.with(@project).and_return(@project)

ঠিক n বারের জন্য:

Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)

কমপক্ষে n বারের জন্য:

Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)

প্রাপ্তি গণনার অধীনে https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/re সে-- অ্যাকাউন্টে আরও বিশদ

আশা করি এটি সাহায্য করে =)


3
মনে হচ্ছে এর সাথে any_instanceকি কাজ হচ্ছে না ?
জ্যারেড বেক

@ ইউলুডকে আমি জানি না
জারেড বেক

2
উরির উত্তরে উল্লিখিত নতুন সিনট্যাক্সটি ব্যবহার করা উচিত ।
theblang

61

expectআরএসপেকের নতুন সিনট্যাক্সটি এরকম দেখতে পাবেন:

2 বার জন্য:

expect(Project).to receive(:find).twice.with(@project).and_return(@project)

ঠিক n বারের জন্য:

expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)

কমপক্ষে n বারের জন্য:

expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)

1
have_receivedসিনট্যাক্স এছাড়াও কাজ করে। expect(Project).to have_received(:find).exactly(n).timesইত্যাদি
ডেভিড Tuite

0

@ জারেডবেক নির্দেশ করেছেন। সমাধান আমার any_instanceডাকে কল করে না।

যে কোনও দৃষ্টান্তের জন্য আমি should_recep এর পরিবর্তে স্টাব ব্যবহার করে শেষ করেছি।

Project.any_instance.stub(:some_method).and_return("value")

এটি যে কোনও নম্বরের জন্য কাজ করবে। বার যদিও।



0

should_receiveএর বিপরীতে any_instance, প্রত্যাশা করে যে শ্রেণি নির্দিষ্ট বারের বার্তা পেয়েছে।

any_instance অন্যদিকে সাধারণত কোনও পদ্ধতিতে স্টাবিংয়ের জন্য ব্যবহৃত হয়।

সুতরাং প্রথম কেসটি এমন একটি প্রত্যাশা যা আমরা পরীক্ষা করতে চাই, যখন দ্বিতীয়টি পরবর্তী পদ্ধতিতে একটি পদ্ধতি পেরিয়ে যাচ্ছে যাতে আমরা এগিয়ে যেতে পারি।


1
ড্রেনমি আমি প্রায় এক বছর আগে আমি যে পোস্টে কয়েকটি কমা যোগ করার জন্য সময় নিয়েছি তা আমি তার প্রশংসা করি ... উত্তরটির প্রযুক্তিগত দিকটিতে কোনও পরিবর্তন হয়েছে বলে মনে হচ্ছে না ... আপনি কেন ভোট গ্রহণ করবেন? আমি এই জন্য ...?
আমসান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.