MochaRails is a mountable Rails engine that serves a browser-based Mocha test suite, along with your development JavaScript files, via the Asset Pipeline. It loads Chai for both should- and expect-style assertions, although since Mocha is decoupled from the assertion library, you can use another assertion library if you choose (or even write your own.)
Using should-style assertions and CoffeeScript, Mocha tests are the best-looking implementation of BDD that I have ever seen in any language. For example, here are some simple tests for a Backbone.js View.
Once you've installed MochaRails and added the test above (simple to do, and explained in the project's Readme), open
Update: Since I first looked into using Mocha with Rails, a project very similar to MochaRails has appeared: Konacha. It looks like momentum is building behind Mocha and Chai!
describe 'ItemView', ->
before ->
@itemView = new Backbone.View
tagName: 'li'
className: 'item'
describe "el", ->
it 'should return a value', ->
expect(@itemView.el).to.exist
it "should return an 'li' element", ->
@itemView.el.tagName.should.equal "LI"
describe '$el', ->
it "should have class 'item'", ->
@itemView.$el.hasClass('item').should.be.true
I would argue that even if you can't or don't want to write your production code in CoffeeScript, you should write your tests in CoffeeScript. By eliminating so much visual noise, CoffeeScripts syntax helps bring the goal of BDD--specs that anyone can read to understand the intended behavior of your system--so much closer to reality.
Once you've installed MochaRails and added the test above (simple to do, and explained in the project's Readme), open
localhost:3000/mocha
to execute your test suite. If you've never seen Mocha's clean and elegant report for browser tests, prepare to be impressed.
Now that's clean! It may seem almost too clean with just three tests, but once you have scores of contexts and hundreds of tests, you'll appreciate the aesthetic. Errors are colored red of course, but Mocha errors do not light up the page like a garish billboard.
Mocha also supports asynchronous code with a simple callback mechanism. I highly recommend you browse Mocha's features and give MochaRails a try.Update: Since I first looked into using Mocha with Rails, a project very similar to MochaRails has appeared: Konacha. It looks like momentum is building behind Mocha and Chai!
I think you also should have mentioned jasminerice.
ReplyDeleteI agree. It was a mistake to write this entire post focused on Mocha, without mentioning some alternatives. The best I know of are Jasminerice, which integrates the popular Jasmine framework with the Asset Pipeline, and the venerable QUnit (no Rails integration that I know of). Personally I much prefer Mocha's approach, but please consider these as well.
ReplyDeletehttps://github.com/bradphelan/jasminerice