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/



_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to