On 4 Feb 2011, at 09:30, Alan B wrote: > Hi all, I'm trying to create a custom matcher that will visit a given > path and check it's authenticated. > Here's what I have so far (using rspec-rails and capybara): > > matcher :require_authentication do > match do |path| > visit path > #page.current_path.should == sign_in_path > page.current_path.should == '/sign_in' > end > end > > The above version works, but when using the commented out line I get: > > NameError: > undefined local variable or method `sign_in_path' for > #<RSpec::Matchers::Matcher:0xbbd68ec> > > sign_in_path is one of the routes in my application and works fine > inside a describe/it block. > I don't understand why the matcher recognises visit() but not > sign_in_path.
I'm surprised either of them do. This DSL is just a factory method for a matcher class. Unless that matcher class includes Capybara and the Rails routing methods module (can't remember the name off-hand) you won't have access to either of these methods in the matcher. Look at the non-DSL way to create a matcher and this will make more sense. Also, you need to return true / false from #match, rather than using an assertion. cheers, Matt m...@mattwynne.net 07974 430184 _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users