Изолиране на спецификациите към едно конкретно извикване на метод

Пиша спецификация за обект (Пример), който извиква метод на друг обект (IO#delete) няколко пъти.

Искам да изолирам тестовете на този метод, но когато правя това:

class Sample
  def delete_them
    io.delete "file1"
    io.delete "folder1"
  end
end

describe Sample do
  let(:io) { stub.as_null_object }
  subject  { Sample.new.tap { |s| s.stub(:io).and_return(io) }}

  it "deletes file1" do
    io.should_receive(:delete).with("file1")
    subject.delete_them
  end

  it "deletes folder1" do
    io.should_receive(:delete).with("folder1")
    subject.delete_them
  end
end

Ако извикам няколко метода, това не е проблем, защото използвам модела на нулев обект. Въпреки това, в този случай, когато изпълня втория тест, той се оплаква:

1) Sample instance methods#delete_them deletes folder1
   Failure/Error: io.should_receive(:delete).with("folder1")
     Stub received :delete with unexpected arguments
       expected: ("folder1")
            got: ("file1")

Има ли начин да се посочи, че всички обаждания трябва да бъдат игнорирани освен това, което се опитвам да се уверя, че се извършва?


person kolrie    schedule 22.10.2011    source източник


Отговори (1)


Този код се компилира добре. Това беше друг проблем, който причиняваше проблема ми.

person kolrie    schedule 23.10.2011