I've just found myself stuck trying to rspec something so am hoping
someone more knowledgable can help.
I have a Connector class which has a class method 'results' that
yields results it get from a network service based on a set of
attributes that I pass to it. I am wanting to yield these results
from my Intermediate class up to the next 'level' so the basic no
frills set up would be this:
class Intermediate
def self.results(attributes)
Connector.each_result(attributes) do |result|
yield result
end
end
end
I've worked out how to stub things for the case where the Connector.
each_result method yields a result once
#setup
@result = mock("result")
Connector.stub!(:each_result).and_yield(@result)
@attributes = {}
@results = []
@block = Proc.new { |r| @results << r }
#action
Intermediate.search_results(@attributes, &@block)
# expectation
@results.should == [EMAIL PROTECTED]
However, what I actually need to do is check each result that is
yielded by the Connector.each_result method and compare it to the
previous one. If they are sufficiently similar I need to merge them
(and same again if the next result is sufficiently similar). I only
want to yeild merged results and results that are not similar to
their preceeding result(s) - I'd imagined he code to do this would be
something along the lines of:
class Intermediate
def self.results(attributes)
@saved_result = nil
Connector.each_result(attributes) do |result|
if results_match(result, @saved_result)
@saved_result.merge!(result)
else
yield @saved_result unless @saved_result.nil?
@saved_result = result
end
end
yield @saved_result unless @saved_result.nil?
end
def results_match(this, last)
return false if last.nil?
....
end
end
I can't for the life of me see how I should spec this though, as trying:
Connector.stub!(:results).and_yield(@result1, @result2)
is expecting the two results to be yielded at the same time and not
sequentially. I can't see how to stub a method to yield sequential
results so I can spec the behavior for different scenarios of
similarities between subsequent results. Is it possible to do this?
Any help would be much appreciated
Cheers
Rupert
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users