I had to convert a sizeable test suite from Jasmine to QUnit. The former has a wide array of matchers and situation specific helpers for explicitly testing things, and the latter is about as barebones as it gets. This is all well and good, it just means converting is a pain.
First, here are some regexes to help. These are vim substitution commands, but you should be able to adapt them for any editor with a regex find & replace. Also, these were written for Coffeescript code which had some optional brackets here and there, so YMMV, but hopefully they are useful.
%s/\vdescribe "(.+)", \-\>/module "\1"/ %s/\vit "/test "/ %s/\vexpect\((.+)\)\.toEqual\(?(.+)\)?/equals \1, \2/ %s/\vexpect\((.+)\)\.toBeTruthy\(\)/ok \1/ %s/\vjasmine\.createSpy/createSpy/ %s/\vexpect\((.+)\).toHaveBeenCalledWith\((.+)\)/deepEqual \1.lastCallArguments, [\2]/ %s\vbeforeEach \-\>/setup: ->/
describe calls to
it "..." to
test "...", some basic expectations from Jasmine to the equivalents in QUnit, and then the
beforeEach calls from Jasmine to
setup options for the
module call. This got me most of the way there, after running them I had to fix the indentation, ensure the
setup: stuff was passed as an option to
module (it was a function call before), and fix some brackets here and there. If you come up with more or better regexes please leave a comment and I’ll add them to the post!
Next, I ripped out a very simple version of the
jasmine.Spy object which I started to really miss in QUnit. This is my super basic copy of the Jasmine implementation, suitable for both command line execution through node-qunit or the in browser test runner.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
Hopefully this will be of use to you if you end up doing anything similar! I have this here mostly for future reference but I hope it helps at least one of you tube surfers out there.