Ever wonder how you can write a cucumber test that would test how your web app responds to a different format, something like JSON or XML?
I was trying to do the following:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Background:
Given I am logged in
And there is the following feeds:
| title | body | category |
| first feed | something good | default |
| second feed | even better | notice |
| 3rd feed | something awesome | notice |
Scenario: Reading feeds via json
When I go to the feeds page using json
And I should see a json file
And I should see 3 feeds in the json |
Running this code I would get a “Can’t find mapping from “the feeds page using json” to a path.”
Trying to figure out how I can do this, I tried to write a new step, like this:
|
1 |
When %r{^I go to the (w+) page using (w+)$} do |page, format|... |
but this resulted in: Ambiguous match of “I go to the feeds page using json”
So, I posted the question on StackOverFlow and it seems everyone was thinking the same way I was.
I continued playing with this idea and here is how I solved the problem:
Modifying the paths.rb file, I changed (Changes are in bold)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
def path_to(page_name)
# Split out format if page_name includes ' using '
# Example: When I go to the accounts page using json
<strong>page_name, format = page_name.split(' using ')</strong>
case page_name
when /the homes?page/
'/'
when /the new account page/
#pass format
new_account_path(<strong>:format => format</strong>)
else
begin
page_name =~ /the (.*) page/
path_components = $1.split(/s+/)
# Also make sure to pass format to the 'guessed' path
self.send(path_components.push('path').join('_').to_sym<strong>, :format => format</strong>)
rescue Object => e
raise "Can't find mapping from "#{page_name}" to a path.n" +
"Now, go and add a mapping in #{__FILE__}"
end
end
end |
This way I don’t have to modify anything else in my features and everything just works.
Thanks, Andrew!
That is what I needed!