[rspec-users] RailsExampleGroup

Ashley Moran ashley.moran at patchspace.co.uk
Fri May 23 17:12:56 EDT 2008


On 23 May 2008, at 21:35, Yi Wen wrote:

> Well, I use this for driving selenium RC. So the approach I am using
> is to setup some data, and then invoke selenium to interact with a
> test server. Apparently the test server uses another connection. Would
> you suggest a better way to handle this? It will be the same for doing
> functional testing on web services. What's the "standard way" of doing
> it?


Ah ok, I get you now.  I did the same thing and it stumped me too, I  
was completely baffled for a whole day.  What you've got with selenium- 
rc is not this:

+--ruby-process--+
|                |
|     rails      |
|       ^        |
|       |        |----->(database)
|     rspec      |
|                |
+----------------+


but this:

+--ruby-process--+
|                |
|     rails      |--------
|                |        \
+----------------+        |
         ^                 |
         |                 |
+--native-proc---+        |
|                |        |
|     browser    |        |
|                |        |
+----------------+        V
         ^             (database)
         |                 ^
+--java-process--+        |
|                |        |
|  selenium-rc   |        |
|                |        |
+----------------+        |
         ^                 |
         |                 |
+--ruby-process--+        |
|                |        |
|     rspec      |--------/
|                |
+----------------+

Nothing like a bit of ascii art to liven up a mailing list :)

My solution was to create a custom story listener, which is a class  
that looks like this (copied from a post I made in April):

class MyStoryListener
  def run_started(number_of_scenarios); end
  def story_started(story, narrative); end
  def story_ended(story, narrative); end
  def scenario_started(story, scenario); end
  def scenario_succeeded(story, scenario); end
  def scenario_pending(story, scenario, error); end
  def scenario_failed(story, scenario, error); end
  def run_ended; end
  # method_missing allows you to remove hooks you don't need
  def method_missing(*args); end
end

Spec::Story::Runner.register_listener(MyStoryListener.new)

What I did was to have the run_started hook delete all non-static data  
out of the database.

There's other things you can do to make the process more useful for  
development.  I've wanted for ages to package some code for this  
together.  I've got a Merb app I want to start soon, and this will be  
an essential pre-requisite.  So hopefully I'll get that done soon and  
I'll post back here.  (However my pet projects usually get  
sidetracked...)


Hope this helps for now anyway.


Ashley


-- 
http://www.patchspace.co.uk/
http://aviewfromafar.net/





More information about the rspec-users mailing list