Question

I am writing a spec for an object (Sample) that calls another object's method (IO#delete) a number of time.

I want to isolate the tests of this method, however when I do this:

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

If I call multiple methods it's not a problem because I am using the null object pattern. However, in this case when I execute the second test, it complains:

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")

Is there a way to indicate that all the calls must be ignored except the one I am trying to make sure is being done?

Was it helpful?

Solution

This code compiles fine. It was another issue that was causing my problem.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top