karma-jasmine1-shim
v1.0.1
Published
Shim for jasmine 1.3 tests to run on jasmine 2.
Downloads
2
Readme
- About This is a karma plugin (framework) which extends jasmine version 2 to allow some of the old tests to pass. It prints deprecation warnings at the end of tests run.
There are breaking changes, though, which cannot be shimed:
- Clock needs to be removed after usage with =jasmine.clock.uninstall()=.
- Object equality assertion is stricter in Jasmine 2 regarding keys with =undefined= value. This means that =toEqual()=, =toHaveBeenCalledWith()=, similar matchers will fail in cases like =expect({}).toEqual({ a: undefined });=.
See how to migrate here: http://jasmine.github.io/2.3/upgrading.html
- Usage Add =jasmine1-shim= to =karma.conf.js=
#+begin_src javascript module.exports = function(config) { config.set({ // ...
// Optional as "plugins" is populated automatically.
plugins: [
'karma-jasmine',
'karma-jasmine1-shim'
],
frameworks: ['jasmine', 'jasmine1-shim'],
// ...
}); }; #+end_src
- Tips on migration Start by adding shim to your frameworks list of Karma’s configuration. Your tests should pass in most of the cases. You will see a list of messages indicating old methods and properties being used that are no longer available in new Jasmine version.
You could fix them by hand if you have just a few tests. Otherwise, =sed= will help. Following are shell commands that will automate migration. Run them in appropriate directory, like =test/spec/=.
First, the easy targets:
#+BEGIN_SRC sh
find . -name '*.js'
| xargs sed -i.bak
-e 's/.mostRecentCall/.calls.mostRecent()/g'
-e 's/.mostRecentCall/.calls.mostRecent()/g'
-e 's/.callCount/.calls.count()/g'
-e 's/.calls.length/.calls.count()/g'
-e 's/.andCallThrough()/.and.callThrough()/g'
-e 's/.argsForCall/.calls.allArgs()/g'
-e 's/.calls[0]/.calls.first()/g'
-e 's/.andCallFake(/.and.callFake(/g'
-e 's/.andReturn(/.and.returnValue(/g'
#+END_SRC
Your tests should still pass. At least failing tests count should not increase.
Above will replace the most obvious methods and properties of spies. Next on the list, are =.reset()= and =.calls= property. It would be presumptuous to treat every occurrence as indication of spy, thus it’s recommended to run these individually and then carefully inspect diffs.
#+BEGIN_EXAMPLE $ find . -name '.js' | xargs sed -i.bak -e 's/.reset()/.calls.reset()/g' $ find . -name '.js' | xargs sed -i.bak -e 's/.calls([^.])/.calls.all()\1/g' #+END_EXAMPLE
And finally, you should migrate your custom matchers. For how to, see http://jasmine.github.io/2.3/upgrading.html
If all seems fine at the end, you can remove backed up files =rm *.bak=.