ruby on rails - RSpec: كيفية اختبار ما إذا تم استدعاء طريقة؟




ruby-on-rails (2)

في rspec الجديدة ، expect أن يكون هذا النحو:

expect(subject).to receive(:bar).with("an argument I want")

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

describe "#foo"
  it "should call 'bar' with appropriate arguments" do
    called_bar = false
    subject.stub(:bar).with("an argument I want") { called_bar = true }
    subject.foo
    expect(called_bar).to be_true
  end
end

ما أريد معرفته هو: هل هناك بنية أجمل متوفرة أكثر من هذا؟ هل أنا في عداد المفقودين بعض الذهول RSPec غير تقليدي من شأنه أن يقلل من التعليمات البرمجية المذكورة أعلاه إلى بضعة أسطر؟ should_receive يبدو أنه يجب أن يفعل هذا ولكن القراءة كذلك يبدو وكأنه ليس بالضبط ما يفعله.


يجب أن تعمل أدناه

describe "#foo"
  it "should call 'bar' with appropriate arguments" do
     subject.stub(:bar)
     subject.foo
     expect(subject).to have_received(:bar).with("Invalid number of arguments")
  end
end

التوثيق: https://github.com/rspec/rspec-mocks#expecting-arguments







rspec