It may be tempting at this point to run a Rails generator to generate the controller, views, helpers, tests, and who knows what other files. We’ll resist this temptation and implement the bare minimum by hand. This way, we don’t end up with a lot of code that isn’t tested and that we might not even need. Let’s map our controller to config/routes.rb:
| Rails.application.routes.draw do |
| resources :users |
| end |
Add app/controllers/users_controller.rb:
| class UsersController < ApplicationController |
| def show |
| end |
| end |
And a view in app/views/users/show.html.erb with some temporary content:
| Hello |
Admittedly, we did take a couple of shortcuts here. A fundamentalist BDD practitioner would have run Cucumber between each little code addition, getting guidance at every little step on the way. We recommend doing this in the beginning until you find your own comfort level regarding how much code is safe to add, remove, or modify between each run. This is a trade-off between development speed and confidence.
Many people set up their environment so that Cucumber runs in the background every time you save a file. Explaining how do this is beyond the scope of this book, but we recommend you check out Guard[59]. It is easy to set up and fun to use!
With the route, controller, and view in place, let’s run Cucumber once more to see where we’re at:
| Feature: See Messages |
| |
| Scenario: See another user's messages |
| Given there is a User |
| And the User has posted the message "this is my message" |
| When I visit the page for the User |
| Then I should see "this is my message" |
| Undefined step: "I should see "this is my message"" (Cucumber::Undefined) |
| features/see_messages.feature:6 |
| |
| 1 scenario (1 undefined) |
| 4 steps (1 undefined, 3 passed) |
| 0m0.428s |
| |
| You can implement step definitions for undefined steps with these snippets: |
| |
| Then(/^I should see "([^"]*)"$/) do |arg1| |
| pending # Write code here that turns the phrase above into concrete actions |
| end |
Whoa! We successfully made a request to our user page. The last step is still undefined, so we need to implement that as well.