[rspec-users] Custom Matcher and Webrat methods

Rodrigo Rosenfeld Rosas lbocseg at yahoo.com.br
Wed Dec 9 19:53:43 EST 2009

Matt Wynne escreveu:
> On 8 Dec 2009, at 22:04, Rodrigo Rosenfeld Rosas wrote:
>> I would like to be able to write a custom matcher so that I could 
>> call this test, for instance:
>> @user.should be_allowed_to_visit(url)
>> @non_welcome.should_not be_allowed_to_visit(url)
>> The matcher would call Webrat methods such as 'visit'.
>> The problem is that it would try to call 'visit' from User class 
>> instead of the binding in which @user access is verified...
>> I have manually set the binding to the Matcher in a before(:all), to 
>> avoid calling 'be_allowed_to_visit(url, binding)', but I would like 
>> to know if there would be a better way to "get" this binding...
>> Any thoughts on that?
> How have you defined the matcher? If you use the old-school technique 
> where you create a matcher class and a helper method to construct the 
> class (instead of using the shiny new matcher DSL) then the method 
> should execute in the context that can see the binding, so you can 
> pick it up and pass it into the matcher class at that point.
> Make sense?
Thank you, Matt, I have finally got it working. The trick is passing 
self to the initialize of the matcher class like:

def be_allowed_to_visit(url)
  BeAllowedToVisit.new(url, self) # def initialize(url, scope); 
scope.visit url...;end

One problem less :) Next one to be solved: making Selenium work faster 
with Webrat :)



Faça ligações para outros computadores com o novo Yahoo! Messenger 

More information about the rspec-users mailing list