[rspec-users] Did I write my specs as I should?

dougui dougui_bzh at hotmail.com
Sat Nov 17 20:51:31 UTC 2012


I read a lot about rails and BDD and I think I've found my own path. I 
want to share my method and to know what you think about that.

This is my workflow :

 1. Creation of feature specs (example 1);
     1. Only the happy path
     2. Test only things than the user can view;
     3. Don't test the number of records of the database, if an email is
        sent or other things like that;
     4. Keep it very simple;
 2. Watch the feature specs fails;
 3. Create views and routes;
 4. Watch the feature specs fail again;
 5. Create the controllers specs (example 2);
     1. Write the specs in complete isolation;
     2. Use Factory Girl's build_stubbed;
     3. Write a context for all conditons in ifs;
 6. Create the code for the controllers specs;
 7. Create the specs for all model's methods I stubbed;
 8. Write the code to pass the model's specs;
 9. Refactor;
10. Continue to the next feature;

I try to respect the single responsability principle (SRP) and Keep It 
Simple, Stupid (KISS).

With the SRP, the controller should manage the majority of objects and 
it should not be a lot of depth. The models are used only for an 
interface with the database and do validation. All other things should 
have their own classes.

I write specs for mailers, helpers and all other classes.

I found this mail : 
http://www.mail-archive.com/rspec-users@rubyforge.org/msg03883.html. And 
I think it's similar.

I don't like Cucumber and I prefer Capybara.

I read this : 
but I just must moved my request in a feature folder. I don't want to 
create request tests. I think it test the same thing than my feature 
specs and it will be slow to create two integration tests.

*Example 1 : A Request Spec

    describe 'Create' do
       it 'add a new project' do
         visit new_project_path
         within('#new_project') do
           fill_in("Title", with: "My Project")
           fill_in("Url", with: "http://www.google.com")
           select("Ruby", from: "Type")
           click_button "Create"
         page.should have_content("Your project was created")

*Example 2 : A Controller Spec*

    describe "#create" do
         context "with valid data" do
             it "redirect to project's path"Did
             it "save the project"
             it "set a flash message"
         context "with invalid data" do
             it "render new template"

What do you think about that? Did I write my specs as I should?

Thanks and bye!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20121117/3a736405/attachment-0001.html>

More information about the rspec-users mailing list