Help For Testing ruby on rails?

I just went through this experience myself and I will tell you that there are many competing philosophies about testing, all of which use similar or identical terminology to mean or assume significantly different things. There is a vast overlap, but on a few crucial details there are vital differences whose apparent importance is magnified by the abysmal state of ones own ignorance. I found this to be exceptionally confusing in the beginning and the source of much misdirected effort on my part. For what it is worth I eventually settled on continuous integration testing for my Rails project. For this I use Cucumber, originally an offshoot of RSpec but now a completely distinct and independent package.

The best places to start are the mailing lists devoted to testing. I can recommend both the RSpec and Cuke lists as places where extraordinarily knowledgeable and helpful people frequent. Both ML are replicated at and can be joined through groups.google.com (http:// groups.google.com/group/rspec and http://groups.google.com/group/cukes). There are also numerous self-help tutorials on the web. Just google (rails ruby testing tutorial).

At my last count, Ryan Bates screencasts at railscast.com provided no fewer than ten episodes either directly about testing or having testing as a significant component of his presentation. Plus there is a treasure trove of other riches to be had at his site. Highly recommended.

Recall to mind frequently that TDD/BDD is above all else a mental approach to computer systems development. The three rules that I have been taught are:

Write no production code AT ALL until you have a failing test. Write only the minimal test that fails the current requirement, AND NO MORE. Write only enough production code to pass the test, AND NO MORE.

It is hard to say which of these rules is the hardest to follow. In the beginning I suppose it has to be rule number one for most people. But after a time that becomes routine and the danger of not following rules two and three become evident. In truth, you must follow all three rules at all times. TDD/BDD just does not happen until you do. people call what they do TDD or BDD when they write tests, or specs or features or whatever; but if they do not rigorously follow the canon respecting what, when and how much code to write then they are really not. It just superficially appears that they are.

The real test for yourself is the truthful answer to the question: Is what I am doing HARD? If the answer is no then you are missing something important (or are a savant). TDD and BDD is HARD. It is VERY HARD. Because you have to cast your every design intent as a programatically testable manifestation. That means you have to think very carefully about precisely what you NEED to accomplish and HOW to accomplish it, whereas most people spent most of the time thinking about what they WANT to accomplish.

If you would like to see an excellent presentation on the grim realities of practicing TDD, this forms the core of a very discursive talk by Bob Martin given at RailsConf2009 entitled "What Killed Smalltalk Could Kill Ruby, Too", http://railsconf.blip.tv/file/2089545/. You have to get past the first five minutes or so which, as far as I could determine, have nothing to do with the subject of his presentation. His assistant however, is the author of Cucumber.

Hi Thank you for your response I gone through the links and your explanation but frankly speaking i understood but not fully

I have one doubt

unit testing (For model) what it does?(According to my knowledge)

  1. It inserts in to database an temporary data from fixtures something.yml when i run rake test:units

FunctionalTesting (For controller) what it does?(According to my knowledge) It checks if the controller is working correctly or not

But when i run rake test:functionals i have one method called

def test_should_create_post assert_difference(‘Post.count’) do post :create, :post => {:title=>“my”,:body=>“my body” } end

but it is not adding to database

please tell me

  1. what unit test does
  2. what functional test does

Where can I find a reliable, experienced Ruby proammer for helping me with an existing site built on Rails? Any thoughts

No need to be rude. I thought I was swnding you a PM

James Byrne wrote: [...]

The real test for yourself is the truthful answer to the question: Is what I am doing HARD? If the answer is no then you are missing something important (or are a savant).

I'm going to disagree *very* strongly with you here. TDD certainly takes discipline, and that may be hard at first. But once you do a little and pick up the pattern, it is exhilaratingly easy, at least for me.

So, I would say to ask yourself: is what I am doing HARD? If the answer is yes, you have missed something. Learn the missing piece. Keep going until it becomes easy. If it is hard, you are working too hard and you need to stop and sharpen your saw.

TDD and BDD is HARD. It is

VERY HARD. Because you have to cast your every design intent as a programatically testable manifestation.

Indeed.

That means you have to think very carefully about precisely what you NEED to accomplish and HOW to accomplish it,

No! Your tests should generally test the result, not the implementation.

Best,

Hi Thank you for your response I gone through the links and your explanation but frankly speaking i understood but not fully

I have one doubt

unit testing (For model) what it does?(According to my knowledge)

  1. It inserts in to database an temporary data from fixtures something.yml when i run rake test:units

FunctionalTesting (For controller) what it does?(According to my knowledge) It checks if the controller is working correctly or not

But when i run rake test:functionals i have one method called

def test_should_create_post assert_difference(‘Post.count’

) do post :create, :post => {:title=>“my”,:body=>“my body” }

end

but it is not adding to database

please tell me

  1. what unit test does
  2. what functional test does