Why is RSpec so slow with Rails 3?

I'm just learning my way through ruby and rails to learn it. One thing I noticed is that testing 1 spec class with 1 test takes about 20 seconds. It's not even using any rails functionality at all. I am just concatenating some strings together and doing some math...

Contrast this with JUnit or ScalaTest... and I could have ran an entire suit of thousands of tests in this amount of time.

One of the reasons I hated grails (I played with it about a year ago) was that tests ran rediculously slow, so the test/feedback cycle was horrendous... and I just refused to put up with that.

People knock Java/Spring/Hibernate, but you can have a fully tiered, database-driven app that populates 100-150 rows of data per test that runs 1000+ tests in under 60 seconds.

Given that knowledge... 20 seconds for 1 test that does nothing seems very, very wrong. Any way I can speed this up?

Even in the worst case I've experienced it's been a few seconds of start-up overhead, nothing close to 20. What versions of rspec and rails are you using? What command are you using to run the spec? What OS, ruby version, etc?

Okay, I admit and I newbie when it comes to this stuff. I'm using Rails 3 (latest) and I put this line in my Gemfile:

group :test do   gem 'rspec-rails' end

I'm guessing that's going to get the latest version of rspec-rails.

As for other questions, I'm running Ruby 1.9.1 on Windows 7 64-bit (not exactly the best OS for out-of-the-box working and stable use of Ruby, I know).

In my IDE, If I run the same could out of RSpec, it is basically instant. If I run RSpec, it reports that the test only took 5 seconds, but the entire execution was 20 seconds. If I had more dummy tests in the same Spec file, it is basically instant. So my guess is that 15 seconds is used by Rails and 5 seconds is used by RSpec? My guess is that the actual code in the tests is a few milliseconds.

Okay, I admit and I newbie when it comes to this stuff. I'm using Rails 3 (latest) and I put this line in my Gemfile:

group :test do gem 'rspec-rails' end

I'm guessing that's going to get the latest version of rspec-rails.

Actually that gets the latest production release of rspec-rails, which is rspec-rails-1.3.3 (as of about 10 minutes ago).

What you want is rspec-rails-2.0.0.rc, and you want to include it in both development and test groups:

group :development, :test do   gem 'rspec-rails', '>= 2.0.0.rc' end

As for other questions, I'm running Ruby 1.9.1 on Windows 7 64-bit (not exactly the best OS for out-of-the-box working and stable use of Ruby, I know).

Yeah - I've given up trying to run ruby on windows. It's just so much better on Linux or Mac OS. There are plenty of people here, more brave than I, however, who can help you in that area.

In my IDE, If I run the same could out of RSpec, it is basically instant. If I run RSpec, it reports that the test only took 5 seconds, but the entire execution was 20 seconds. If I had more dummy tests in the same Spec file, it is basically instant. So my guess is that 15 seconds is used by Rails and 5 seconds is used by RSpec? My guess is that the actual code in the tests is a few milliseconds.

5 seconds is painfully long for 1 example. Once you've paid the startup debt (which comes from a combination of rspec, rails, bundler), it should be < 0.001 seconds for one example unless you're connecting to an external service of some sort. Although that's what I'm seeing on Mac/Linux. Any Windows users wanna report on the times you're seeing?

What IDE are you using?

I'll try updating the version of rspec-rails. Thanks for that!

I'm using jetbrans's rubymine. I'm used to IDEA, so I'm right at home with RubyMine. I'm using the latest EAP that works with ruby 1.9 and rails 3.

Okay, the newest version of the rspec executes all the tests in 2.873 seconds with a total time of 16.7 seconds. My guess is that this rspec- rails version saved me ~2 seconds and rails is still eating up 15 seconds.

This is very similar to Grails. 15-20 seconds is absurd. I am a nitpicker and would just outright refuse to program under such conditions. LOL :wink:

Maybe if I have a spare hard drive I can install linux? What's a good distribution these days for someone that likes user-friendly and good performance?

Ken

Okay, the newest version of the rspec executes all the tests in 2.873 seconds with a total time of 16.7 seconds. My guess is that this rspec- rails version saved me ~2 seconds and rails is still eating up 15 seconds.

This is very similar to Grails. 15-20 seconds is absurd. I am a nitpicker and would just outright refuse to program under such conditions. LOL :wink:

programming RoR on Win7 is absurd imho :wink:

Maybe if I have a spare hard drive I can install linux? What's a good distribution these days for someone that likes user-friendly and good performance?

I use kubuntu, i love kde, its one of the easier linux to setup has regular updates, latest version 10.10 is out today!

throw vmware or virtualbox on win7 and install linux to run as a virtual machine on your win7 (no need to worry about dual boot setup), be up and running in minutes and be rid of the GUI handcuff mindset!

Oh, before I read this post, I realized Ubuntu had a safe windows installer. I used it, and I'm running unbuntu right now. Man, it took like 15 minutes to download/install everything, and it takes like 8 seconds to boot up after it was done. You'd think windows could get a quad core to boot that fast after so many years of making better cpus...

Anyway, I know very little linux. Well, that's not true, I used to use slackware back in 1995, and I've used it off and on, but it's been many years.

I'd configuring/making ruby, but it says I don't have permissions. I could run it as root of course, but I wonder... where was I supposed to put the ruby-1.9.2 folder? I know this must sound silly, but I can't remember where the 'goto' place was for putting source files. Was it under /usr? I don't remember. It looks a little different than it used to.

Anyway, I'll keep plugging away on this end.

Yay, i discovered this program called rvm and now I can get 1.9.2 installed :wink: Woot!

you sound like me when I got going =P

use sudo to execute command as root, you will need to enter root password once, you can download software and place it under /opt (i like to put things there)

here is what you will need to get up and running, the following will install the build tools and header files you will need to get Ruby & Rails build from source.

sudo aptitude install build-essential make sudo aptitude install libc6-dev libssl-dev sudo aptitude install libreadline6-dev zlib1g-dev libsqlite3-dev

cd /opt

sudo wget ftp://ftp.ruby-lang.org//pub/ruby/1.9/ruby-1.9.2-p0.tar.gz sudo tar xvzf ruby-1.9.2-p0.tar.gz

cd ruby-1.9.2-p0

sudo ./configure sudo make sudo make test sudo make install

verify you have ruby, gem, irb installed

ruby -v gem -v irb -v

now you're ready to install rails

sudo gem install rails sudo gem install sqlite3-ruby

verify you have rails 3.0.0

rails -v

fyi to keep your ubuntu system up to date type

sudo aptitude update sudo aptitude safe-upgrade

install other gems you need likewise quick way to search for gems on a keyword such as 'debug' below:

sudo gem search debug --remote

happy hacking =)

you don't need RVM, follow my instruction in the other email and you will be working with the latest & greatest!

Ok, well I'm up and running anyway. The entire round trip to run my specs is 3 seconds. RSpec reported that it only took 0.017264579 seconds to run the same test.

LOL.

Either my windows installation (which isn't that old) has massive entropy going on when it comes to installed software and what not... or windows 7 64-bit is an utter piece of crap.

One question though... RubyMine runs really, really bad. I could only install the OpenJDK and not the Sun JDK... and JetBrains says it's going to run bad when you load the IDE.

Is there a sexy-looking, sexy-functioning IDE out there for Linux/ Ubuntu? Something with code colouring (the rails cast colouring is very nice), refactoring, having it suggests stuff as you type (like "." to call method on an object) and stuff like that?

The only ones that come to mind are netbeans or eclipse, but maybe there's other ones?

Wow, I had no idea you wrote all that stuff. I posted I got it working before your post :wink:

Yeah, I actually did much of this stuff on my end, so I'm glad to see verification that I was doing things right! :wink: I had problems using "bundle install" with sqlite, so yeah, I had to install those 2 sqlite3 packages. Lousy error messages though. Good thing google exists! :wink:

I think the last thing left is to either figure out a way to get the openjdk to run well with rubymine, or find another ide. I really like jetbrains' products. I've used intellij idea for almost 10 years and love it, so having that same experience would be great (not to mention I don't have to learn any new keyboard shortcuts and get confused as I continue to work on my java projects).

netbeans is a good free choice, but i like to use kate a super fast, lightweight editor, syntax highlighting, can open a small terminal screen and have a folder view, what more can you want then the power of the command line dude! =P

seriously you don't need all that other stuff, it gets in the way and makes you lazy imho!

$ aptitude search sun | grep java p sun-javadb-client - Java DB client p sun-javadb-common - Java DB common files p sun-javadb-core -Java DB core p sun-javadb-demo -Java DB demo p sun-javadb-doc -Java DB documentation p sun-javadb-javadoc -Java DB javadoc

try the following to see if rubymine will run faster, you might have to make it search for the new sun jre

sudo aptitude install sun-javadb-core sun-javadb-common

ok forget the java stuff above, didn't notice it was the java db stuff =P

I updated my video card drivers and that seemed to make it go quite a bit faster. It's still a bit sluggish at times because of the jdk, but it's tolerable. I'll run with this for now since I'm used to it. I also don't think it makes me lazy :wink: It lets me focus on the things that matter. Maybe it's different in ruby, but I can not imagine not using IDEA for java, even if the syntax was nicer.

Why don't you just install the Sun JDK?

One thing I've run into, on a windows box at work, was my 'home' directory was a mapped drive on another server on the network. It took, and I timed this so I wouldn't exaggerate, 13 minutes to run! When I moved everything locally it took 45 seconds. I had to change a start up script so it put my 'home' on my c drive.

Cheers, John Ivanoff