Skip to content

Latest commit

 

History

History
179 lines (122 loc) · 11.5 KB

20.md

File metadata and controls

179 lines (122 loc) · 11.5 KB

Jasmine Core 2.0 Release Notes

Summary

These notes are for Jasmine Core 2.0.

Breaking Changes

The introduction.js page covers the current syntax, highlighting the changes. Here are the known interface changes that are not backwards compatible with 1.x.

  • New syntax for asynchronous specs
  • New syntax for spies
  • New interface for reporters
  • Better Equality testing
  • Replaced custom matchers for ease of use
  • Change to toThrow matcher
  • Clock now remains installed when a spec finishes
  • More Jasmine internal variables/functions have been moved into closures

New syntax for asynchronous specs

Similar to Mocha, Jasmine befores, specs, and afters can take an optional done callback in order to force asynchronous tests. The next function, whether it's a before, spec or after, will wait until this function is called or until a timeout is reached.

New syntax for spies

Spies have a slightly modified syntax. The idea came from a desire to preserve any of the properties on a spied-upon function and some better testing patterns.

New interface for reporters

The reporter interface has been replaced. The callbacks are different and more consistent. The objects passed in should only provide what is needed to report results. This enforces an interface to result data so custom reporters will be less coupled to the Jasmine implementation. The Jasmine reporter API now includes a slot for a timer object.

Better Equality testing

We removed the previous equality code and are now using new code for testing equality. We started with Underscore.js's isEqual, refactored a bit and added some additional tests.

Replaced custom matchers for ease of use

The interface for adding custom matchers has been replaced. It has always been possible to add custom matchers, but the API was barely documented and difficult to test. We've changed how matchers are added and tested. Jasmine adds its own matchers by the same mechanism that custom matchers use. Dogfooding FTW.

Change to toThrow matcher

We've changed the behavior of the toThrow matcher, moving some functionality to the toThrowError matcher. This should allow more of the requested use cases.

Clock now remains installed when a spec finishes

After installing the Jasmine Clock, it will stay installed until uninstall is called -- clearing up any ambiguity for when those timing functions will revert to using the global clock object.

More Jasmine internal variables/functions have been moved into closures

Certain variables/functions like a function to get the next spec id have been moved into closures, making the Jasmine interface cleaner.

Other Changes

  • Massive refactoring and better testing
  • Environment setup now in boot.js
  • Development and Build moved to Grunt
  • Changes to how Jasmine is loaded
  • Changes to how Jasmine is tested
  • Better node.js support
  • Better Continuous Integration Environment at Travis
  • Support matrix updated
  • Removed JsDoc Pages
  • Adding Code Climate for JavaScript

Massive refactoring and better testing

This is the biggest set of changes. We've touched nearly every file and every object. We've merged objects together and factored out code. We styled the code more consistently. We've improved nearly every test.

In general, Jasmine is made of smaller, more-loosely-coupled objects, unit-tested with explicit dependencies injected. This made tests easier to read, write, and maintain. We know this has made Jasmine development easier for the core team. We expect (and hope) this makes it easier for the community to extend Jasmine and provide pull requests that make more sense the first time out.

Environment setup now in boot.js

Instantiation and setup of the Jasmine environment, including building reporters, exposing the "global" functions, and executing tests has moved into its own file: boot.js. This should make it easier to add custom reporters, configure some objects, or just in general change how you use Jasmine from the outside.

For example, during development, Jasmine uses its own devboot.js to load itself twice - once from jasmine.js and once from the source directories.

Development and Build moved to Grunt

We've moved away from Ruby and embraced Node.js and Grunt.js for the various command line tasks during development. Yes, it's a just a different set of dependencies. But it's less code for the team to maintain - it turns out that JavaScript tools are pretty good at building JavaScript projects. This will make it easier for the community to make sure contributions work in browsers and in Node.js before submitting Pull Requests. There is more detail in the Contributor's Guide.

Changes to how Jasmine is loaded

We did not want to add new run-time dependencies, yet we needed to be cleaner when loading Jasmine. So we wrote a custom "require" scheme that works in Node.js and in browsers. This only affects pull requests which add files - please be careful in these cases. Again, the Contributor's Guide should help.

Changes to how Jasmine is tested with Jasmine

Writing a custom require system helped enforce self-testing - the built jasmine.js testing Jasmine from the source directories. Overall this has improved the stability of the code. When you look at Jasmine's tests, you'll see both jasmine and j$ used. The former, jasmine, will always be used to test the code from source, which is loaded into the reference j$. Please adhere to this pattern when writing tests for contributions.

Better node.js support

Node.js is now officially a first-class citizen. For a long time we've made sure tests were green in Node before releasing. But it is now officially part of Jasmine's CI build at Travis. For the curious, the node_suite.js, is essentially a boot.js for Node. An official npm is coming.

Better Continuous Integration Environment at Travis

The CI build at Travis now runs the core specs in a build matrix across browsers. It's far from complete on the operating system matrix, but you will see that Jasmine runs against: Firefox, Chrome, Safari 5, Safari 6, Phantom.js, Node.js, and IE versions 8, 9, and 10. Big thanks to SauceLabs for their support of open source projects. We will happily take pull requests for additional OS/Browser combos within the matrix.

Support Matrix Updated

We're dropping support for IE < 8. Jasmine 1.x remains for projects that need to support older browsers.

Removed JsDoc Pages

Comments in code are lies waiting to happen. Jasmine's JsDoc comments were no exception. The comments were out of date, the generated pages were even more out of date, and frankly they were not helpful. So they're gone.

Last year saw the posting of the introduction.js page to document the real, practical interface for projects to use. This page has received a lot of positive feedback so expect more pages like this one.

Adding Code Climate for JavaScript

We are running Code Climate for Jasmine. We have some work to do here but it's helping us easily find code hotspots.

Pull Requests and Issues

The following Pull Requests were merged:

  • ObjectContaining wrong filed value error message #394 from albertandrejev
  • Removed unnecessary parameter from suiteFactory() call #397 from valera-rozuvan
  • jasmine.Any supports Boolean #392 from albertandrejev
  • Reporters get execution time #30
  • toThrow matchers handle falsy exceptions #317
  • Removed deprecated jasmine.Matchers.pp #363 from robinboehm
  • Fix for Clock ticking to default to 0 #340 from Caio Cunha
  • Whitespace failures should be easier to understand #332 from bjornblomqvist
  • Fix for more markdown-y image for Build status #329 from sunliwen
  • UTF-8 encoding fixes #333 from bjornblomqvist
  • Replaced deprecated octal literal with hexadecimal from kris7t
  • Make getGlobal() work in strict mode from metaweta
  • Clears timeout timer even when async spec throws an exception from tidoust
  • Timeouts scheduled within a delayed function are correctly scheduled and executed from maciej-filip-sz

Bug Fixes

  • Improved the performance of the HTML output with a CSS change #428 - Thanks @tjgrathwell
  • Removed an accidental global pollution of j$ as a reference to Jasmine. Thanks to Morten Maxild from the mailing list
  • There is now a consistent this between beforeEach, it and afterEach for a spec
  • A spy's strategy now has properties returnValue and throwError because they are better names
  • Make it easy to copy the title of failing specs from the HTML output
  • Don't add periods to the full name of a spec fix #427
  • Allow Env to take optional spec/suite ids when asked to execute
  • Mock clock now less intrusive, replacing global timer functions only when clock is installed
  • Restore custom failure messages for toHaveBeenCalledWith
  • Jasmine global object has a addCustomEqualityTester and addMatchers (no longer directly on global)
  • Fixed a global leak of timer
  • Remove currentRunner from Env (users can use topSuite from Env instead)
  • Specs without expectations are now considered passing
  • Improve error message when a spec does not call the async callback within the default time interval
  • Allow passing a negativeCompare in a custom matcher for more custom implementations when .not is called
  • Update favicon to be higher resolution
  • Make all async functions be subject to the timeout

There were several other pull requests that either had already been fixed, or were good starting points for the various changes above. Thank you for all of the hard work to keep Jasmine awesome.

Other Bugs and Features

There were a few small changes and fixes that didn't fit into any of the above categories:


Release Notes generated with Anchorman