Rspec: হওয়া উচিত (এই বা যে)

কোন পরিস্থিতিতে দুটি (বা তার বেশি) ফলাফল গ্রহনযোগ্য হয় এমন কোন পরিস্থিতিতে RSpec লিখার সর্বোত্তম উপায় কী হবে?

এখানে আমি যা করতে চাই তার উদাহরণ। এটি সম্ভবত ভুল (আমি মনে করি), তবে এটি আপনাকে যা অর্জন করার চেষ্টা করছি তা সম্পর্কে আপনাকে জবাব দিতে হবে:

it "should be heads or tails" do
  h="heads"
  t="tails"
  flip_coin.should be(h || t)
end

এবং হ্যাঁ, আমি সচেতন যে আমি আমার নিজস্ব rspec ম্যাটেরার লিখতে পারি "should_be_one_or_the_other (option1, option2)", তবে এটি একটু বেশি মনে হয় - আমি একটি ভাল সমাধান আশা করছি।

26

5 উত্তর

ActiveSupport বস্তু # মধ্যে? পদ্ধতি সরবরাহ করে। আপনি RSpec এর সাথে একত্রিত করতে পারেন এবং কেবল নিম্নলিখিতটি ব্যবহার করতে পারেন:

flip_coin.should be_in(["heads", "tails"])

অথবা নতুন রুপে 3 সিনট্যাক্সের সাথে:

expect(flip_coin).to be_in(["heads", "tails"])
28
যোগ
ক্ষুদ্র সংশোধন: ActiveSupport #in? বস্তুঅ্যারে নয়, এটি flip_coin.in এর মত বলা হয়? % w (মাথা tail) এবং flip_coin কোনও বস্তু হতে পারে।
যোগ লেখক Dave Schweisguth, উৎস
সাহায্য করার জন্য ধন্যবাদ
যোগ লেখক Sergey Potapov, উৎস
এটি সর্বশেষ সংস্করণে আমার জন্য কাজ করে না, প্রথমে এটি একটি অ্যারের মধ্যে চালু করতে হবে be_in (["head", "tail"])
যোগ লেখক Vox, উৎস

আমি এই পুরানো জানি কিন্তু আমি RSpec 3.4 এ এই মধ্যে দৌড়ে, একটি বা কীওয়ার্ড এখন। সুতরাং এই বৈধ:

expect(flip_coin).to eq('heads').or(eq('tails'))
19
যোগ

আমি সম্ভবত এই মত কিছু লিখতে চাই:

it "should be heads or tails" do
  ["heads", "tails"].should include flip_coin
end
14
যোগ
হ্যাঁ ভুল উপায় প্রায়, কিন্তু স্পষ্টভাবে পরিষ্কার সিনট্যাক্স
যোগ লেখক idrinkpabst, উৎস
একটি শালীন বিকল্প, কিন্তু মনে হচ্ছে এটি সঠিক "প্রত্যাশিত" উপায়গুলি সঠিকভাবে প্রত্যাশিত মূল্যের সাথে সম্পন্ন করার উপায়কে সাফ করে।
যোগ লেখক GlyphGryph, উৎস

এই অধিকারটির প্রত্যাশা নিয়ে লেখার আরেকটি উপায়:

it 'should be heads or tails' do
  flip_coin.should satisfy{|s| ['heads', 'tails'].include?(s)}
end
11
যোগ

বা প্রয়োগ করে থাকা ম্যাটচার করুন

expect(flip_coin).to eq('heads').or(be == 'tails')
2
যোগ
আমি ডিসেম্বর 15 থেকে "বা" ব্যবহার করে উত্তর থেকে এই কম স্বজ্ঞাত খুঁজে।
যোগ লেখক Dave Newton, উৎস