#413 Fast Tests pro
A slow test suite can put a damper on test-driven development. In this episode I show a variety of ways to optimize specs including: selective testing, preloading Rails, and testing outside of Rails.
- Download:
- source code
- mp4
- m4v
- webm
- ogv
yeah .the speed of test is very important for TDD.. personally i find Spork + sublime Text2 Rspec bundle is really helpful and significantly fast!
What the purpose ?
As of MiniTest 4.2.0 you can run tests in parallel with
parallelize_me
.Oh man that's great. I feel the reason that ryan chose to focus on Rspec in this episode is that it is still widespread in most existing applications. And, the rails core team took minitest out of rails 4 for the time being.
I'm using minitest spec in my latest application, the tests are blazingly fast.
I was curious how this setup compares with using MiniTest or how much faster MiniTest and MiniTest Spec would be when using some of these gems and techniques.
Ryan, FactoryGirl.build implictly creates records in database when it has associations. Maybe it's better to use just Model.new for things like validations instead of build()?
That's absolutely the case. I believe Model.new is faster than 'build' method. There's an article about it: http://blog.12spokes.com/web-design-development/how-factorygirl-can-slow-down-your-test-suite-aka-factory-build-vs-blank-activerecord-objects/
You can use
build_stubbed
, that will build object with stubbed associations.that's really good.
Yeah why not !
Would have liked to see this cast for Test::Unit too... ;-)
+1
Great railscast!
Only one problem with zeus and guard:
When we are using it, randomized with seed is always 0. Any solutions/suggestions? Is not a very big deal nonetheless.
Please open an issue on zeus on github
Awesome railscast!
I've been dealing with this problem a lot lately while building a multi-tenancy app. Corey Haines' view on TDD is very interesting, and I encourage anyone interested to check out his brand new screencast episodes on Clean Coders.
If you have problems with url helpers while running zeus, I could be wrong but believe it's because of this here.
I applaud that effort to optimize time, but like spork, I've kicked zeus to the curb. They make the test environment just a little too dissimilar from the production and development environments. I wind up spending a lot of time tracking down bugs in my code... or my tests... only to learn it's neither; it's my testing environment flaking out. So how much time is it really saving? (BIG fan of guard, though.)
YMMV
I have this test which is taking 5 seconds to run:
How would I speed up a test like that? -- I'm using poltergeist with phantomjs and all js: true tests are painfully slow :(
Integration Tests are always going to be relatively slow, as you have to wait on the actual request/response cycles and page rendering, which is a lot more overhead. While there is some stuff you can do to dull the pain, practically you may want to stick to running javascripty tests on Travis or another CI if you aren't making active changes to the feature in question. (IE, run your focused tests, and let the CI build tell you if you broke something unintentionally)
Yes that's true Bradley...
You can tag it as 'slow' and just run it on CI.
I suspect your test is so slow because of
page.should_not have_content
. Instead usepage.should have_no_content
The first one will wait and see if the content appears. The second will test straight away that there is no content.
Great railscast.
I had problems getting zeus and guard working nicely together until I found that I had to upgrade guard-rspec to 2.1.0 or greater
I've got everything working except parallel in guard. I have zeus running parallel and zeus working within guard, I've added the parallel: true to my guardfile.
Would this be an issue with guard, guard-rspec or parallel_tests? What versions of these gems should I be running?
https://github.com/railscasts/413-fast-tests/blob/master/screencaster-after/Gemfile.lock
Hope it helps ;)
Is anybody else receiving this error?
To replicate you clone the repo for the episode, go into the after folder and run
I am using ruby 1.9.3-p385 and rbenv.
I did a crude fix that seems to work. I basically just required the time_duration library from inside models/episode.rb.
Please correct me if this is the wrong approach :)
What a great episode! Thanks a lot for this, my test-suite is much faster now!
Wow my test suite went from 1min30sec to 58 sec just by using the GC trick! Thank you!
Great stuff.
What about the sqlite :memory: database ? I have been using this since months for my tests, just to speed up the database transactions without having to change the specs. Not sure how big the gain is in the current rails but it was a big improvement once.
hi does anybody knows or can point me to some examples if using the above with mongodb?
This gem https://github.com/evrone/factory_girl-seeds helps to minimize total spec run time by preloading records for factory_girl and then use them in spec.
Why running tests with rspec is faster than with rake? What's rake doing unnecessarily?
It seems that one of the things rspec-rails does is to add 'test:prepare' as a dependency to the test task. Commented it in the activerecord databases.rake to check and it's accountable for 2 seconds here.
Still cannot figure out where the other 2 seconds goes.
This bug has been fixed in Rails 4.
Try https://github.com/evrone/factory_girl-seeds to speed up your tests
Great Railcast,
Besides a couple of shortcomings, which i think can be fixed with time, it has taught us how to save on time while testing, hence making work a whole lot easier
Great work!
Really helped me a lot. Thanks.
Another great cast :)
This is really very nice post you shared, i like the post, thanks for sharing
waw this was really a new information that is on testing that also about selective testing, preload rail testing are all new ideas that you have come up with in testing.
thank you for giving me the necessary information
This is really good and working for me. Thank you very much.
Diwali, the "festival of lights", is a South Asian festival in Nepal (as Tihar) and India (as Deepawali) celebrated in autumn Happy Diwali 2016 (northern hemisphere) or spring (southern hemisphere) every year.[3][4] It is an official holiday in Fiji, Guyana, India,[5] Pakistan,[6] Malaysia, Mauritius, Myanmar, Nepal, Singapore, Sri Lanka, Suriname and Diwali Wishes Trinidad and Tobago. The festival spiritually signifies the victory of light over darkness, good over evil, knowledge over ignorance, and hope over despair and is celebrated by Hindus, Sikhs, and Jains.[7][8][9] Its Happy Diwali celebration includes millions of lights shining on housetops, outside doors and windows, around temples and other buildings in the communities and countries where it is observed.[10] The festival preparations and rituals typically extend over a five-day period, but the main festival night of Diwali Diwali Messages coincides with the darkest, new moon night of the Hindu Lunisolar month Kartika in Bikram Diwali SMS Sambat calendar. In the Gregorian calendar, Diwali night falls between mid-October and mid-November.
Before Diwali night, people clean, renovate, and decorate their homes and offices.[11] On Diwali night, people dress Diwali Images up in new clothes or their best outfit, light up diyas (lamps and candles) inside and outside their home, participate in Diwali Status family puja (prayers) typically to Lakshmi – the goddess of fertility and prosperity. After puja, fireworks follow,[12] then a family Diwali Quotes feast including mithai (sweets), and an exchange of gifts between family members and close friends. Diwali also marks a major shopping period in nations where it is celebrated.[13]
The name of festive Diwali Greetings days as well as the rituals of Diwali vary significantly among Hindus, based on the region of India. In many parts of India,[14] the festivities Diwali Pics start with Dhanteras (in Northern and Western part of India), followed by Naraka Chaturdasi on second day, Diwali on the third day, Diwali Padva dedicated to wife–husband relationship on the fourth day, Shivaay Box Office Income and festivities end with Bhai Dooj dedicated to sister–brother bond on the fifth day. Dhanteras usually falls eighteen days after Shivaay Box Ofice Collection Dussehra.
hai this is Jennyarora Mumbai escort service visit our personal site if you want more information
Thanks for sharing the article, very interesting and rewarding, Thank's again
one of the interesting post thanks for share this
Excellent episode thanks !
I've watched it twice !
Amazing operates and eye-catching look Ahmedabad individual partners welcome you’re on this site. I know that what objective why you come here and I be certain that get in touch with me you find out all satisfaction that you not only considers but never think about, I am 21 decades only school college school student
I connected to actually successfully pass best time with my customer that is objective that I only offer my Service to top quality people five classification hotel. So if you are want to go an awesome evening and then make every second mind-blowing and satisfaction complete
Call any time Ahmedabad Éscorts for your services in less than an hour or less search for hottest female Éscorts in Ahmedabad at Night Angels Ahmedabad Éscorts agency .
Excellent article, read in one breath! Thank you!
We haven't had any problems with speed tests, regardless of what software we use. But then again, it might be the fact that a lot has changed in the last 3 years... Nice info. Thank you.
Good Post
This is my first time i visit here. I found so many entertaining stuff in your blog, especially its discussion. From the tons of comments on your articles, I guess I am not the only one having all the leisure here! Keep up the excellent work.
Great post. Helpful.
Top post as usual.
Thank for this.
I Found the best Discussion here very Helpfull and you are providing very Useful Stuff Here.
Nice info. Thanks for the informative post.
Well, I believe the speed test in this situation will be quite useful for TDD. Other than that, I like sublime + Spork Text2 Rspec bundle really awesome in terms of speed.
Thanks for the post..
great article
amazing article shared.