On Apr 10, 2009, at 12:51 AM, Ben Mabey wrote:

Gavin Hughes wrote:
"Then I should be on /users/3/posts/8/comments/2/edit"

What's the solution for parsing out and matching and arbitrarily deep
nested route?

Hi Gavin,
Let me try to answer your question without actually answering it. :)

I generally don't test my URLs. IMO, for the majority of cases the URL is merely an implementation detail of the application. For example I could easily see the URL in your example (/users/3/posts/8/ comments/2/edit) as being "/posts/8/comments/2/edit" or "/comments/2/ edit" or "/posts/the-name/comments/2/edit". The user would be fine with all of these cases, they really don't care one way or the other. Instead of focusing on an implementation detail of the application scenarios should be focused on the behaviour that the user would like to see. In your particular case what the user really cares about is being able to edit a comment, correct? So, instead of just verifying that the user is on the right page after clicking on "Edit Comment", you should have the user actually fill out the form to edit the comment. Then verify that the comment is actually updated on the post's page after they submit the comment editing form.

One place I've actually been interested in testing URLs was to verify that the app actually redirected after a form submission. The user facing reason for this is to verify that the app works as expected(e.g. doesn't repost a comment or something) when the user refreshes to get fresh data. Of course, sticking to what the user cares about, it would probably be best to have this tested in a separate scenario for 'user refreshes page after posting comment' .

-lenny

Off the top of my head something like this may work:

Scenario: edit comment
  Given a post exists named "big news"
  And I have made a comment "bad post!" on the "big news" post
  And I am viewing the "big news" post

  When I change my "bad post!" comment to "Great post!"
  And press "Update Comment"

  Then I should see "Great Post!"

With this you are just testing the behaviour of the application. (BTW, you could write the scenario above number of ways and still be testing the same thing- I'm not sure if I love the way I wrote it....) You could change your URL naming scheme and this would still pass because the behaviour hasn't changed. By embedding the URL in the scenario your URL scheme is now coupled to your features unnecessarily.

Sorry, for not really answering your question but I think you will thank me later if you take this approach. :)


-Ben
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users


_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to