Read my latest article: Announcing RailsDeveloper (posted Wed, 01 Sep 2010 17:01:00 GMT)

Spec Your Views

Posted by Robby Russell Thu, 02 Aug 2007 07:00:00 GMT

82 comments Latest by Bin Wed, 01 Sep 2010 04:37:38 GMT

I meant to work on this post… oh about 7 months ago.

Way back in January (7 months ago), Jamis Buck posted an article titled, Testing your views, which gave a few tips on using Test::Unit to, as the title suggests, test your views.

While, I’m not going to rewrite everything that Jamis wrote, I’d like to show you how to test these views with RSpec. (you might take a moment to quickly read his post…)

In this example, I’m going to show you how we’re able to write specs for the following RHTML, which you’ll notice matches the code that he wrote tests for.


  <% if @user.administrator? %>
    Hi <%= @user.name %>! You appear to be an administrator.
    <%= link_to "Click here", admin_url, :id => "admin_link" %>
    to see the admin stuff!
  <% end %> 

Jamis writes, “The only really significant thing you ought to be testing here is that the admin link only shows up for administrators. “

So, let’s do just that, but with RSpec.

I’m not sure how Jamis is handling his view tests, but we’re going to approach our view specs, much like we approach our controller specs, with the use of mocks and stubs, because we really don’t need to spec any of our models at this level in the application.

Tip: Write specifications for your models… in your model specs not in your controller or view specs.

The first thing that we’re going to do is setup a custom spec helper, because for something like an mocked user, will probably get reused in other areas of the user interface. Spec helpers are essentially modules that you can include in your RSpec descriptions (the block that starts with describe) and reuse.

In this spec helper, I’m going to include two methods, to mock the User model and stub out any of the methods that are necessary for spec’n this view.


module MockUserHelper
  def mock_normal_user
    user = mock(User)
    user.stub!(:administrator?).and_return(false)   # <--- NOT an admin
    user.stub!(:name).and_return('David Chelimsky')
    return user
  end

  def mock_admin_user
    user = mock(User)
    user.stub!(:administrator?).and_return(true)    # <--- IS an admin
    user.stub!(:name).and_return('Aslak Hellesoy')
    return user
  end
end

In the mock_normal_user method, we’re constructing a mock object and stubbing out the methods that we see are being called in the RHTML code. In mock_admin_user, we’re basically doing the same thing, but just stubbing the administrator? method to return true for this mock user.

By stubbing these methods, we’ll be able to send a non-ActiveRecord object to the view and have it render without knowing the difference. For example, the if @user.administrator? condition will return true or false, depending on how we stubbed it.

For more information on mocks and stubs, read here.

Now that we have our spec helper, let’s go ahead and dive into a few specifications for the view.


describe "index page" do
  include MockUserHelper

  it "should render an admin link for an admin user" do
    assigns[:user] = mock_admin_user
    render 'index'
    response.should have_tag('a#admin_link')
  end

  it "should not render an admin link for a normal, non-admin user" do
    assigns[:user] = mock_normal_user
    render 'index'
    response.should_not have_tag('a#admin_link')
  end
end  

Please note: This code example is only longer than the one shown by Jamis because he didn’t include how he setup all his user sessions/objects. ;-)

When these specs are run, we can see the following results.


Pretty output courtesy of RSpec + TextMate bundle

Great, we’ve been able to write specifications for our Rails views without a lot of pain. Stay tuned for more posts on this topic as I continue writing about how Designers and Developers can work together, in harmony. (see my last post on this topic)

For more information on adopting RSpec, please visit the RSpec project homepage.

Subscribe to my RSS feed Enjoying the content? Be sure to subscribe to my RSS feed.
Comments

Leave a response

  1. Avatar
    Matt Aimonetti Thu, 02 Aug 2007 08:03:52 GMT

    Good article, I seriously think that view testing is REALLY important and too often overlooked. And if you do true TDD, the view tests should come before your code!

    Regarding your great example, I believe we could even check on the link itself by doing something like that:

    it "should render an admin link for an admin user" do
     assigns[:user] = mock_admin_user
     render 'index'
     response.should have_tag('a#admin_link[href=?]', "#{admin_url}")
    end
  2. Avatar
    Dylan Egan Thu, 02 Aug 2007 09:12:44 GMT

    Nice article.

    Havent really done much with regards to view specs, but would love to start a project by writing them first.

  3. Avatar
    Joe Van Dyk Thu, 02 Aug 2007 09:20:22 GMT

    ZenTest’s view tests let you do cool stuff like:

    assert_links_to admin_url

    wish they’d add that to the rspec view tests.

  4. Avatar
    Yurii Rashkovskii Thu, 02 Aug 2007 09:26:27 GMT

    You may also use

    user = mock_model(User, :administrator? => true, :name => ‘Aslak Hellesøy’)

  5. Avatar
    Luke Redpath Thu, 02 Aug 2007 10:43:43 GMT

    Joe, using RSpec custom matchers, it would be quite possible to write something like:

    
    response.should have_link_to(admin_url)
    

    Custom matchers are very easy to write. See the RSpec rdoc for more information.

  6. Avatar
    David Chelimsky Thu, 02 Aug 2007 11:31:39 GMT

    Nice, clear article. Thanks Robby.

    And thanks for spelling my name right. Although I do question the wisdom of making Alsak an admin instead of me.

    The only thing I’d add is that BDD is a design process, and “behaviour-driven” means write the examples of behaviour before the code that implements it.

    I think this is much easier to grok when dealing with models than it is with views, in large part because we don’t want to specify every character we stick in a view – just the stuff w/ business value – in order to avoid binding the examples too closely to the code.

    But difficult to grok or not, an important benefit of BDD gets lost when you’re spec’ing existing code rather than implementing bits of code against bits of specs in a red-green-refactor cycle.

  7. Avatar
    Robby Russell Thu, 02 Aug 2007 12:57:58 GMT Recommend me on Working with Rails

    Thanks for the feedback people. Some good ideas on how to extend and improve the examples.

    Matt,

    ”...I seriously think that view testing is REALLY important and too often overlooked. And if you do true TDD, the view tests should come before your code!”

    Indeed. This is a very important thing to point out. While this is the ideal, it isn’t always what happens. For example, we’ve been contracted on several occasions to integrate testing into existing Rails applications quite often. So, we’ve had to work on a process for diving into an existing application and begin working on specs.

    David C,

    ”...thanks for spelling my name right. Although I do question the wisdom of making Alsak an admin instead of me.”

    You’re welcome and I made this decision with extreme caution, but don’t worry… I have big plans for you in future code samples. ;-)

  8. Avatar
    Dan Kubb Thu, 02 Aug 2007 17:00:21 GMT

    Tip: Write specifications for your models… in your model specs not in your controller or view specs.

    Sorry for being a bit OT, but this quote reminds me of a pet peeve of mine with Rspec and Rcov.

    When you run a controller spec with rcov, it’ll show code coverage for any files that were executed, including any models that it uses (assuming I don’t mock them all, which I usually do). If I’m spec’ing my controller, I want to restrict coverage reporting to that controller file only. I don’t care if any libs, helpers or models were used, I want their coverage to be 0% until I spec them explicitly.

    I think if there was a way to tell rcov inside a spec which files are to include in the coverage report, and the true coverage was reported, alot of projects would see their coverage drop significantly. Even though it would result in a bit of a drop this would give people a better indication of how well they really are covering their code, rather than assuming because one spec ran some unrelated code that it was being fully tested.

  9. Avatar
    Daniel Fischer Mon, 13 Aug 2007 21:57:28 GMT

    Thanks Robby,

    That was really helpful, especially since I was wondering “wtf is the point of view testing. How would I do it in rSpec?”

    I’d love some more examples over time. Thanks again.

  10. Avatar
    Sudara Tue, 04 Sep 2007 13:54:47 GMT

    Double thanks from me.

    For some reason, existing ‘blog docs’ on Rspec just are not as clear and well written as yours ;)

    Keep it up, you’ve got another subscriber.

    sudara

  11. Avatar
    Ara Vartanian Thu, 06 Dec 2007 21:25:40 GMT

    I wonder about using mocks in cases like this.

    I tend to use mocks when the original asset itself is difficult to test, but if the ActiveRecord object is just as easy to test as the mock, why not get more bang for your testing buck?

    That is, I don’t understand why decoupled test are a positive in and of themselves.

    Let me give an example. Let us say I changed the interface on User and on the methods relating to permissions. My User unit test break, and I fix those. But now my views are actually broken, but because the decoupled view tests test against the mock, they still pass: a false positive. And I have no indication from my testing framework that my application is broken.

    It almost seems as though mocks violate DRY since they force me to specify the interface to my models twice, both in the model itself and in the mocks: a maintenance burden.

  12. Avatar
    grosser Sun, 30 Mar 2008 10:34:34 GMT

    I tend to use fixtures with mocked methods (admin?) for view testing, so that i do not need to mock every field and can be sure my test subjects stay valid

  13. Avatar
    Daniel Mon, 24 Nov 2008 15:11:09 GMT

    It’s always nice to have some real world examples for Rspec. I just started to use Rspec in a project. Do you know whether there is any book around. I found only one book, but that was never published…. Greets, Daniel

  14. Avatar
    Vay mua nha Mon, 08 Mar 2010 09:00:49 GMT

    Great post, thank you for sharing

  15. Avatar
    email template design Mon, 08 Mar 2010 10:24:38 GMT

    It almost seems as though mocks violate DRY since they force me to specify the interface to my models twice, both in the model itself and in the mocks: a maintenance burden.

  16. Avatar
    e card design Mon, 08 Mar 2010 10:25:54 GMT

    project. Do you know whether there is any book around. I found only one book, but that was never published…. Greets, Daniel

  17. Avatar
    multimedia design Mon, 08 Mar 2010 10:27:02 GMT

    DRY since they force me to specify the interface to my models twice, both in the model itself and in the mocks: a maintenance burden.

  18. Avatar
    flash banners design Mon, 08 Mar 2010 10:27:44 GMT

    DRY since they force me to specify the interface to my models twice, both in the model itself and in the mocks: a maintenance burden.

  19. Avatar
    flash website design Mon, 08 Mar 2010 10:29:16 GMT

    the interface to my models twice, both in the model itself and in the mocks: a maintenance burden.

  20. Avatar
    data recovery Tue, 06 Apr 2010 14:12:56 GMT

    Have you ever tried this within a CMS – such as drupal or cascade?

  21. Avatar
    laptop battery Thu, 29 Apr 2010 09:22:37 GMT

    If you are looking for the best brand new laptop batteries at the most preferred price, http://www.adapterlist.com/hp/pavilion-dv2000.htm HP pavilion dv2000 Battery http://www.adapterlist.com/hp/pavilion-dv6000.htm HP pavilion dv6000 Battery http://www.adapterlist.com/hp/dv2000.htm hp dv2000 battery

  22. Avatar
    laptop batteries Thu, 29 Apr 2010 09:24:15 GMT

    thank you for this outstanding article.I thought certino was the best technologh for laptop battery performance. http://www.globallaptopbattery.co.uk/sony/vgp-bps2a.htm Sony vgp-bps2a Battery http://www.globallaptopbattery.co.uk/sony/vgp-bps2b.htm Sony vgp-bps2b Battery http://www.globallaptopbattery.co.uk/sony/vgp-bps2c.htm Sony vgp-bps2c Battery

  23. Avatar
    Christian Louboutin Thu, 06 May 2010 13:39:14 GMT

    module MockUserHelper def mock_normal_user user = mock(User) user.stub!(:administrator?).and_return(false) # <- NOT an admin user.stub!(:name).and_return(‘David Chelimsky’) return user end

  24. Avatar
    wholesale laptop battery Thu, 13 May 2010 06:21:19 GMT

    The first thing that we’re going to do is setup a custom spec helper, because for something like an mocked user, will probably get reused in other areas of the user interface.

  25. Avatar
    pass4sure 70-663 Tue, 18 May 2010 07:45:27 GMT

    And acknowledgment for spelling my name right. Although I do catechism the acumen of authoritative Alsak an admin instead of me. The alone affair I’d add is that BDD is a architecture process, and “behaviour-driven” agency address the examples of behaviour afore the cipher that accouterments it.

  26. Avatar
    pass4sure 642-383 Tue, 18 May 2010 07:45:47 GMT

    This is a actual important affair to point out. While this is the ideal, it isn’t consistently what happens. For example, we’ve been apprenticed on several occasions to accommodate testing into absolute Rails applications absolutely often. So, we’ve had to plan on a action for diving into an absolute appliance and activate alive on specs.

  27. Avatar
    pass4sure 642-373 Tue, 18 May 2010 07:46:14 GMT

    When you run a ambassador blueprint with rcov, it’ll appearance cipher advantage for any files that were executed, including any models that it uses (assuming I don’t apish them all, which I usually do). If I’m spec’ing my controller, I wish to bind advantage advertisement to that ambassador book only. I don’t affliction if any libs, cadre or models were used, I wish their advantage to be 0% until I blueprint them explicitly.

  28. Avatar
    pass4sure 650-177 Tue, 18 May 2010 07:46:35 GMT

    Let me accord an example. Let us say I afflicted the interface on User and on the methods apropos to permissions. My User assemblage analysis break, and I fix those. But now my angle are in fact broken, but because the decoupled appearance tests analysis adjoin the mock, they still pass: a apocryphal positive. And I accept no adumbration from my testing framework that my appliance is broken.

  29. Avatar
    scott Thu, 20 May 2010 08:00:21 GMT

    Many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.car dvd laptop ac adapter

  30. Avatar
    15245454545465 Thu, 20 May 2010 15:09:39 GMT
  31. Avatar
    nike sb shoes Fri, 28 May 2010 09:11:36 GMT

    nike sb shoes

  32. Avatar
    Antena1 Fri, 28 May 2010 13:02:22 GMT

    Hi. Thank you a lot for this information. I’ll follow you on each post you write ;) .Nice words

  33. Avatar
    radii timeless deluxe Sat, 05 Jun 2010 03:59:24 GMT

    ert re t

  34. Avatar
    bridesmaid dresses Mon, 07 Jun 2010 09:37:11 GMT

    Nice article!I would follow it when I want to finish my wedding.

  35. Avatar
    2009 collection Wed, 09 Jun 2010 03:25:48 GMT

    tyu ty

  36. Avatar
    air jordan 18 Wed, 09 Jun 2010 03:26:30 GMT

    tyuty

  37. Avatar
    nike air max 95 Fri, 11 Jun 2010 02:24:07 GMT

    er tret

  38. Avatar
    air max 360 ii Fri, 11 Jun 2010 02:24:14 GMT

    re t

  39. Avatar
    coach watches Fri, 11 Jun 2010 09:01:17 GMT

    coach watches http://www.discount-coach-outlet.com/coach-watches.html zkazxh@qq.com Leisure is more and more important in the life. Here I know a lot of leisure that is good at me. Adjust our life interest, bring us the enthusiasm of exercise. The post is very well. By the way I know some websites is very well such as http://www.all-carefully.net Disscount fashionable item is hotting on sale!

  40. Avatar
    designer handbags reviews Fri, 11 Jun 2010 10:17:25 GMT

    I think if there was a way to tell rcov inside a spec which files are to include in the coverage report, and the true coverage was reported, alot of projects would see their coverage drop significantly. Even though it would result in a bit of a drop this would give people a better indication of how well they really are covering their code, rather than assuming because one spec ran some unrelated code that it was being fully tested.

  41. Avatar
    coach watches Mon, 14 Jun 2010 00:30:48 GMT

    coach watches http://www.discount-coach-outlet.com/coach-watches.html zkazxh@qq.com Leisure is more and more important in the life. Here I know a lot of leisure that is good at me. Adjust our life interest, bring us the enthusiasm of exercise. The post is very well. By the way I know some websites is very well such as http://www.all-carefully.net Disscount fashionable item is hotting on sale!

  42. Avatar
    jordan 1 shoes Tue, 15 Jun 2010 20:54:46 GMT

    Took me time to go through all of the feedback, however I actually loved the article. It proved to be very useful to me and I am certain to all the commenters right here as well! It’s all the time nice when you cannot solely be told, but additionally entertained! I am certain you had enjoyed penning this blog post.

  43. Avatar
    hosting murah indonesia indositehost.com Thu, 17 Jun 2010 02:07:38 GMT

    thanks for explain this topic

  44. your give easy explanation. great work. :)

  45. Avatar
    fat burning furnace scam Thu, 17 Jun 2010 03:00:35 GMT

    good explain as well.

  46. Avatar
    Corporate Gifts Fri, 18 Jun 2010 19:38:23 GMT

    hi,The Motif of your blog is very good to me, I hope more exchanges with you this Motif.

  47. Avatar
    Corporate Gifts Fri, 18 Jun 2010 19:39:08 GMT

    Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming. Thanks again and good luck!

  48. Avatar
    acne treatments Fri, 18 Jun 2010 19:40:42 GMT

    I found this is an informative and interesting post so i think so it is very useful and knowledgeable. I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. In fact your creative writing ability has inspired me. Really the article is spreading its wings rapidly…

  49. Avatar
    canada pharmacy online Fri, 25 Jun 2010 11:25:46 GMT

    I am hoping the same best work

  50. Avatar
    Karoline Darrigo Mon, 28 Jun 2010 05:56:50 GMT

    power strips
    power socket
    extension cords
    screwdriver
    booster cables
    battery clip
    tow rope
    ratchet tie dowm
    bathroom vanity
    mosaic glass
    extension cord
    power strip
    copper clad aluminum
    recliner sofa
    adhesive tape
    shower enclosure
    shower room
    bathtub
    bar stools
    non-woven bag
    bamboo blinds
    waiting chairs
    security tags
    eas
    cosmetic packaging
    power cable
    speaker cable
    solar collector
    solar water heater
    extension cord
    glue gun
    power socket
    drawing machine
    straightening machine
    power strip
    recliner
    leather sofa
    sectional sofa
    makeup brushes
    hair rollers
    make up brushes
    drawer runner
    drawer slides
    solar heater
    solar energy
    bucket teeth
    ratchet tiedown
    booster cable
    tow rope
    glue stick
    glue gun
    booster cable
    power cord
    trouble light
    glass bottle
    dinning chair
    optical fiber Cable
    solar lighting
    power strip
    extension cord
    trouble light
    theater chair
    tiered seating
    booster cable
    glue gun
    battery clip
    hot glue gun
    power strips
    booster cable
    extension cords
    screwdriver
    swing chain
    iron chain
    knit scarf
    knit hat
    knitted shawl
    booster cables
    battery clip
    tow rope
    ratchet tie down
    shower room
    shower enclosure
    computer steam shower room
    bed hooks
    scaffold coupler
    solar water heater
    solar collector
    hair accessories
    christmas ball
    clinical thermometer
    infrared forehead thermometer
    rapid thermometer
    basal thermometer
    pacifier thermometer manufacturer
    fever thermometer manufacturer
    electronic thermometer manufacturer
    forehead thermometer
    medical thermometer
    digital thermometer
    flexible thermometer manufacturer
    waterproof thermometer
    baby thermometer manufacture
    ear thermometer
    infrared ear thermometer
    digitalsphygmomanometermanufacturer
    digital blood pressure monitor manufacturer
    upper arm blood pressure monitor
    automatic digital blood pressure monitor
    wrist blood pressure monitor

  51. Avatar
    nb-1lh battery Fri, 02 Jul 2010 04:02:23 GMT

    When you run a controller spec with rcov, it’ll show code coverage for any files that were executed, including any models that it uses (assuming I don’t mock them all, which I usually do). If I’m spec’ing my controller, I want to restrict coverage reporting to that controller file only. I don’t care if any libs, helpers or models were used, I want their coverage to be 0% until I spec them explicitly.

  52. Avatar
    hanging pot racks Sat, 17 Jul 2010 13:59:07 GMT

    Your articles are always and refreshing and fun to read. Thanks Robby!

  53. Avatar
    honeycomb panels Mon, 19 Jul 2010 03:36:42 GMT

    Thanks a lot for enjoying this beauty article with me. I am apreciating it very much! Looking forward to another great article. Good luck to the author! all the best!

  54. Avatar
    Discount Louis Vuitton Mon, 19 Jul 2010 16:42:18 GMT

    Monogram Mini Lin Louis Vuitton Speedy 30 M95319 Louis Vuitton Speedy 30 Louis Vuitton Saumur M95314 Louis Vuitton Saumur Louis Vuitton Bucket PM M95316 Louis Vuitton Bucket Louis Vuitton Boulogne M95317 Louis Vuitton Boulogne Louis Vuitton Speedy 30 M95224 Louis Vuitton Speedy 30 Louis Vuitton Saumur XL M95220 Louis Vuitton Saumur XL Louis Vuitton Diaper Bag M95221 Louis Vuitton Diaper Bag Louis Vuitton Danube M95228 Louis Vuitton Danube Louis Vuitton Bucket PM M95226 Louis Vuitton Bucket Louis Vuitton Boulogne M95225 Louis Vuitton Boulogne Louis Vuitton Manon Mini Pouch M95668 Louis Vuitton Manon Mini Pouch Louis Vuitton Manon PM M95621 Louis Vuitton Manon Louis Vuitton Manon MM M95619 Louis Vuitton Manon Louis Vuitton Saumur M95227 Louis Vuitton Saumur Louis Vuitton Manon PM Platine M95620 Louis Vuitton Manon PM Platine Louis Vuitton Angele M95622 Louis Vuitton Angele Louis Vuitton Angele M95617 Louis Vuitton Angele Louis Vuitton Manon MM M95618 Louis Vuitton Manon

  55. Avatar
    asics running shoes Wed, 21 Jul 2010 09:13:47 GMT

    This was a useful post and I think it is rather easy to see from the other comments as well that this post is well written and useful. Keep up the good work asics shoes asics running shoes Asics 77 Asics 78 Onitsuka Tiger Tokidoki Fabre asics onitsuka women’s asics gel nimbus

  56. Avatar
    Richard2000 Sun, 25 Jul 2010 13:12:03 GMT

    But now my angle are in fact broken, but because the decoupled appearance tests analysis adjoin the mock, they still pass: a apocryphal positive. And I accept no adumbration from my testing framework that my appliance is broken. jump higher earth4energy Electronic Cigarette tava tea error fix

  57. Avatar
    free music download mp3 Sun, 25 Jul 2010 15:15:39 GMT

    well its you know its awesome

  58. Avatar
    andrew Sun, 25 Jul 2010 16:09:55 GMT

    fantastic blog . please keep us updated. hot news | android phone | protect kids | investigation | food | worker | watch expendables online | music magazine

  59. Avatar
    android Sun, 25 Jul 2010 16:11:40 GMT

    fantastic blog . please keep us updated.

  60. Avatar
    Used Stationary Bikes Tue, 27 Jul 2010 09:01:23 GMT

    I so enjoy your writing, thank you for posting an interesting article and good.

  61. Avatar
    Start Sharing Not Selling Tue, 27 Jul 2010 09:03:16 GMT

    That’s a cool script. I am grateful because you have shared with my article interesting.

  62. Avatar
    wangji0111 Tue, 27 Jul 2010 09:43:30 GMT
  63. Avatar
    essay help Tue, 27 Jul 2010 15:02:12 GMT

    Very nice post, thanks. But why don’t you remove the spam above my comment? :)

  64. Avatar
    logo design Wed, 28 Jul 2010 08:08:55 GMT

    It’s really great post, i also searching for something like that, good information, I would like to appreciate your work, Thanks for sharing logo design & logo designs

  65. Avatar
    ugg Wed, 28 Jul 2010 08:21:03 GMT
  66. Avatar
    kids Thu, 29 Jul 2010 13:15:11 GMT

    thanks for this useful info

  67. Avatar
    place for buy and sell link Fri, 30 Jul 2010 13:43:14 GMT

    nice

  68. Avatar
    Monogram Rubis Sun, 01 Aug 2010 13:31:13 GMT

    have a good time

  69. Avatar
    Monogram Tahitienne Sun, 01 Aug 2010 13:31:52 GMT

    Now that we have our spec helper, let’s go ahead and dive into a few specifications for the view.

  70. Avatar
    Louis Vuitton Outlet Sun, 01 Aug 2010 13:33:10 GMT

    In the mock_normal_user method, we’re constructing a mock object and stubbing out the methods that we see are being called in the RHTML code. In mock_admin_user, we’re basically doing the same thing, but just stubbing the administrator? method to return true for this mock user.

  71. Avatar
    Start Sharing Not Selling Tue, 03 Aug 2010 18:25:09 GMT

    great post…cheerful master Travel Jakarta bandung

  72. Avatar
    start sharing not selling Thu, 05 Aug 2010 15:15:03 GMT
  73. Avatar
    bag suppliers Fri, 06 Aug 2010 03:11:27 GMT

    g that Jamis wrote, I’d like to show you how to test these views with RSpec. (you might ta

  74. Avatar
    flowers delivery Fri, 06 Aug 2010 07:31:29 GMT

    flowers delivery I really liked your article. Keep up the good work. I love flowers…I am also interested to send flowers all over the world….

  75. Avatar
    health insurance Sat, 07 Aug 2010 06:09:07 GMT
  76. Avatar
    xubeibei Mon, 09 Aug 2010 06:39:30 GMT

    The only thing I’d add is that BDD is a design process, and “behaviour-driven” means write the examples of behaviour before the code that implements it. coach wallets

  77. Avatar
    sbs Thu, 12 Aug 2010 22:00:35 GMT

    I Found the website recently, and I will follow up recently. I would like to thank you for the efforts you have made in writing this article.

  78. Avatar
    jeffreyfrog Mon, 16 Aug 2010 16:50:59 GMT

    Great Buddy how you know about this in very details, it is really very interesting and knowledgeable things.

    carpet cleaning phoenix

  79. Avatar
    power balance Fri, 20 Aug 2010 03:24:38 GMT

    Our main purpose is to help you find the hot toys . Our Animal Shaped Rubber Bands is selling fast. These animal rubber bands wholesale are made of silicone. wholesale Animal Shaped Rubber Bands are not just pretty,Animal Rubber Bands wholesale are also quite clever because they recover their original shape after each use, so you can use them over and over again. zhu zhu pets, Baby Carriers is our new product.It is one of our best seller. , power balance Pillow Pets Plush Pencil Case is hot selling. Silicone Watch They are rich-looking and most attractive and very popular with our other customers. We have business conections all over the world.Our hot toys includes: Taylormade golf, Callaway Golf, bakugan battle brawlers and something special golf equipment Animal Shaped Rubber Bands We show you the hottest toys that are out right now. Our lists are compiled using analgorithym based on the toys popularity, quality, value, safety, awards, and innovation. You will find your favorite toys in toptoys2trade.com. new bakugan include female bakugan, it is really amazing cute. Everyone loves her. Solar Powered Toys helps you enjoy low-carbon lifestyle, with the help of sun, build your interesting life. prada handbags ecco shoes d&g handbags guess handbags http://www.jerseys2trade.com/power-balance-c-142/ ">power balance

  80. Avatar
    Hair Extensions London Mon, 23 Aug 2010 18:50:51 GMT

    Such People Are really consistent to spam links on websites sucks

  81. Avatar
    Harry Mon, 30 Aug 2010 23:10:37 GMT

    Good article but what exactly does RHTML stand for? Power4home

  82. Avatar
    Bin Wed, 01 Sep 2010 04:37:38 GMT

    ‘Gucci Charm’ Medium Tote 247237 F4CLG 9794 ‘Gucci Charm’ Medium Tote 247237 F4CLG 9794 ‘Gucci Craft’ Medium Tote 247209 F4CMG 8453 ‘Gucci Heritage’ Large Boston Bag 247572 BGL2G 2365 ‘Gucci Heritage’ Large Tote 247574 A7MAG 1060 Gucci ‘Bamboo Bar’ Large Tote 232927 A2O1N 2703 Gucci ‘Bamboo Bar’ Large Tote 232927 F4G1N 9763 Gucci ‘Bamboo Bar’ Large Tote 232946 F4G1N 9757 Gucci ‘Bamboo Bar’ Medium Tote 232959 F4G1N 9763 Gucci ‘D Gold’ Medium Tote 211982 FFPAG 9643 Gucci ‘D Gold’ Small Tote 189831 FFPAG 9643 Gucci ‘GG running’ medium tote 247183 AL70T 2814 Gucci ‘GG Twins’ Medium Boston Bag 232958 F4C7N 9761 Gucci ‘GG Twins’ Medium Boston Bag 232958 F4C7N 9761 Gucci ‘GG Twins’ Medium Tote 232957 F4C7N 8613 Gucci ‘Icon Bit’ Large Tote 232952 FWCGN 9767 Gucci ‘Icon Bit’ Medium Tote 229852 AA61R 1000 Gucci ‘Icon Bit’ Medium Tote 229852 AA61R 9022 Gucci ‘Icon Bit’ Medium Tote 229852 FWCGN 9767 Gucci ‘Interlocking’ Medium Tote 223954 FWC4T 9762 Gucci ‘Jolie’ Large Tote 211970 FTAVJ 9765 Gucci ‘Jolie’ Large Tote 211970 FTAVX 8429 Gucci ‘Jolie’ Large Tote 211970 FTAVX 9791 Gucci ‘Jolie’ Large Tote 211975 FAF4X 1000 Gucci ‘Jolie’ Large Tote 211975 FAF4X 9769 Gucci ‘Jolie’ Medium Tote 211971 FTAVX 9791 Gucci ‘Jolie’ Medium Tote 211971 FTAVX 8429 Gucci ‘Joy’ Medium Boston Bag 193603 FP1JG 8552 Gucci ‘Joy’ Medium Boston Bag 193603 AH01G 9022 Gucci ‘Joy’ Medium Boston Bag 193603 FP1JG 9761 Gucci ‘Jungle’ Large Tote 232942 BGD0N 1908 Gucci ‘Ladies Web’ Medium Tote 211936 FTATG 9791 Gucci ‘Ladies Web’ Medium Tote 211936 FTATG 9791 Gucci ‘Sukey’ Large Tote 211943 ECUDG 9560 Gucci ‘Sukey’ Large Tote 211943 FAFXG 8526 Gucci ‘Sukey’ Large Tote 211943 FAFXG 9769 Gucci ‘Sukey’ Large Tote 211943 FN92G 9752 Gucci ‘Sukey’ Large Tote 211943 FVEHG 9761 Gucci ‘Sukey’ Large Tote 211943 FVEHG 9769 Gucci ‘Sukey’ Medium Boston Bag 223974 FAFXG 8526 Gucci ‘Sukey’ Medium Boston Bag 223974 FAFXG 9643 Gucci ‘Sukey’ Medium Boston Bag 223974 FAFXG 9761 Gucci ‘Sukey’ Medium Boston Bag 223974 FAFXG 9769 Gucci ‘Sukey’ Medium Boston Bag 223974 FAGEG 9770 Gucci ‘Sukey’ Medium Tote 211944 AA61G 2535 Gucci ‘Sukey’ Medium Tote 211944 FAFXG 8526 Gucci ‘Sukey’ Medium Tote 211944 FAFXG 8613 Gucci ‘Sukey’ Medium Tote 211944 FAFXG 9761 Gucci ‘Sukey’ Medium Tote 211944 FAGEG 9770 Gucci ‘Sukey’ Medium Tote 211944 FVEHG 9761 Gucci ‘Sukey’ Medium Tote 211944 FVEHG 9769 Gucci ‘Sunset’ Medium Tote 232954 A261T 1200 Gucci ‘Sunset’ Medium Tote 232954 F4G1T 9685 Gucci ‘Sunset’ Medium Tote 232973 A7M0N 9014 Gucci ‘Techno Tag’ Medium Tote 241101 AF51N 9014 Gucci ‘Techno Tag’ Medium Tote 241101 FWCGN 8655 Gucci ‘Techno Tag’ Medium Tote 241101 FWCGN 8655 Gucci ‘Bamboo’ Medium Top Handle Bag 224964 A2O0G 1200 Gucci ‘Bamboo’ Medium Top Handle Bag 224964 A2O0G 1200 Gucci ‘Bamboo’ Medium Top Handle Bag 224964 A2O0G 1200 Gucci ‘Icon Bit’ Large Top Handle Bag 232949 FWCGN 8651 Gucci ‘Joy’ Medium Top Handle Bag 203696 FP1JG 8552 Gucci ‘New Bamboo’ Large Top Handle Bag 240241 EIM2N 1000 Gucci ‘New Bamboo’ Large Top Handle Bag 240241 FWCGN 8655 Gucci ‘Secret’ Medium Top Handle Bag 223941 FWC3T 9664 Gucci ‘Secret’ Medium Top Handle Bag 223948 FWC3T 9664 Gucci ‘Pelham’ Medium Shoulder bag 137621 FAF3G 1000 Gucci ‘D Gold’ Large Shoulder Bag 189835 AA61G 9022 Gucci ‘D Gold’ Large Shoulder Bag 189835 FFPAG 9761 Gucci ‘D Gold’ Large Shoulder Bag 189835 FFPAG 9643 Gucci ‘Icon Bit’ Medium Shoulder Bag 228584 ECU6R 1000 Gucci ‘Interlocking Icon’ Medium Shoulder Bag 223951 ECU6T 1000 Gucci ‘Interlocking Icon’ Medium Shoulder Bag 223951 FTAQT 9643 Gucci ‘Interlocking Icon’ Medium Shoulder Bag 223951 FTAQT 9761 Gucci ‘Jungle’ Large Shoulder Bag 232940 BGD0N 1000 Gucci ‘New Jackie’ Large Shoulder Bag 218491 A261G 1200 Gucci ‘New Jackie’ Large Shoulder Bag 218491 A261G 2703 Gucci ‘New Jackie’ Large Shoulder Bag 218491 EG91G 3069 Gucci ‘New Jackie’ Large Shoulder Bag 219704 BCC8G 1000 Gucci ‘New Jackie’ Large Shoulder Bag 223929 CTA0G 1000 Gucci ‘New Pelham’ Large Shoulder Bag 223955 A2O0T 2703 Gucci ‘New Pelham’ Large Shoulder Bag 223955 F4G1T 9780 Gucci ‘New Pelham’ Large Shoulder Bag 223958 A261T 2033 Gucci ‘New Pelham’ Large Shoulder Bag 223958 A2O0T 2703 Gucci ‘New Pelham’ Large Shoulder Bag 223958 F4G1T 9780 Gucci ‘Pelham’ Medium Shoulder Bag 137621 FAF3G 9761 Gucci ‘Pelham’ Small Shoulder Bag 137621 FAF3G 9643 Gucci ‘Pelham’ Small Shoulder Bag 162900 AA61G 9022 Gucci ‘Pelham’ Small Shoulder Bag 162900 FAF3G 9643 Gucci Charlotte’ Medium Shoulder Bag 203503 FFP5G 9643 Gucci Large Shoulder Flap Bag 240236 EIM2N 1000 Gucci Large Shoulder Flap Bag 240236 FWCGN 8655 Gucci Medium Shoulder Flap Bag 240266 FWCGN 8655 ‘Gucci Heritage’ Medium Hobo 247602 A7MAG 2061 ‘Gucci Heritage’ Medium Hobo 247602 AIX2G 2187 Gucci ‘Charlotte’ Medium Hobo 211810 FTAQZ 8701 Gucci ‘D Gold’ Large Hobo 189833 AA61G 2019 Gucci ‘GG Running’ Medium Hobo 247185 EJG1T 2814 Gucci ‘GG Running’ Medium Hobo 247185 F4CIT 8569 Gucci ‘GG Twins’ Large Hobo 232945 F4C7N 9643 Gucci ‘GG Twins’ Medium Hobo 232962 AA61N 9022 Gucci ‘GG Twins’ Medium Hobo 232962 F4C7N 8708 Gucci ‘GG Twins’ Medium Hobo 232962 F4C7N 9769 Gucci ‘Icon Bit’ Large Hobo 232950 EIA2N 7685 Gucci ‘Icon Bit’ Medium Hobo 232961 FWCGN 8651 Gucci ‘Icon Bit’ Medium Hobo 232961 FWCGN 9767 Gucci ‘Interlocking’ Medium Hobo 223952 FWC4T 9762 Gucci ‘Jungle’ Medium Hobo 232930 BGD0N 1908 Gucci ‘Pelham’ Medium Hobo 211986 F4G1T 9685 Gucci ‘Pelham’ Medium Hobo 211986 FAF3G 9643 Gucci ‘Secret’ Medium Hobo 223949 FWC3T 9664 Gucci ‘Sukey’ Medium Hobo 232955 AA61G 5709 Gucci ‘Sukey’ Medium Hobo 232955 FAFXG 9761 Gucci ‘Sukey’ Medium Hobo 232955 FAFXG 9769 Gucci ‘Techno Horsebit’ Large Hobo 240239 A7M0N 1000 Gucci \’D Gold\’ Large Hobo 189833 FFPAG 9761 Gucci \’Ladies Web\’ Medium Hobo 211934 BEG1G 9022 Gucci ‘Croisette’ Evening Bag 235320 BGD0N 1000 Gucci ‘Croisette’ Evening Bag 235320 ECTFN 9583 Gucci ‘G Night’ Evening Bag 247288 EIV0G 6017 Gucci ‘New Pelham’ Evening Bag 223960 A261T 2033 Gucci ‘Sigrid’ Evening Bag 240247 CT00S 1000

Share your thoughts... (really...I want to hear them)

Comments