Upgrading to Jasmine 5.0
Overview
Most users will be able to upgrade to Jasmine 5.0 without making any changes. However, it does contain a few breaking changes that will affect some users. Following the advice in this guide will give you the greatest chance of a smooth upgrade experience.
Breaking changes in Jasmine 5.0 include changes to how backslashes are handled
in file globs on Windows, changes to how Env#execute is called, changes to how
Node-based libraries boot jasmine-core, and changes to the system requirements.
You can find a complete list of breaking changes in the release notes for
jasmine-core
and jasmine
.
All users are encouraged to upgrade to the latest 4.x release and resolve any
errors or deprecation warnings prior to upgrading to 5.0. In particular, people
who use the jasmine package on Windows should upgrade to at least 4.5.0 first
because that release adds an important deprecation warning that affects Windows
users. For the same reason, people who use the jasmine-browser-runner package
on Windows should upgrade that package to at least 1.3.0 prior to upgrading it
to 2.0.
The new parallel execution mode introduced in Jasmine 5.0 comes with additional restrictions on how both specs and reporters are written. These restrictions apply only when Jasmine is run in the parallel mode. See the guide to parallel execution for details.
Contents
- System requirements
- Upgrading jasmine-browser-runner
- Changes to backslash handling on Windows
- Support for parallel execution
- Changes to global error handling in browsers
- Changes to
Env#execute node_boot.jsremoval
System requirements
The following previously-supported environments are no longer supported:
- Node <18
- Safari 14
- Firefox 91
Although Jasmine 5.0 may still work in some of those environments, we no longer test against them and won’t try to maintain compatibility with them in future 5.x releases.
Upgrading jasmine-browser-runner
If you’re using jasmine-browser-runner, upgrade to version 2.0. Your package
manager (npm/yarn/etc) should automatically install jasmine-core 5.0 or later
unless your package.json specifies an earlier version.
Changes to backslash handling on Windows
Historically, backslashes in file globs such as the spec_files configuration
property were treated as directory separators on Windows and as the start of an
escape sequence on other operating systems. Beginning with jasmine 5.0 and
jasmine-browser-runner 2.0, they are treated as the start of an escape
sequence on all operating systems. This change makes Jasmine configuration files
more portable and ensures that Windows users can specify filenames that happen
to match special glob syntax. See the glob package’s
changelog and
README
for more information.
Deprecation warnings related to backslashes were added in jasmine 4.6.0 and
jasmine-browser-runner 1.3.0. Windows users should upgrade to those versions
or later and resolve all deprecation warnings before upgrading to jasmine 5.x
or jasmine-browser-runner 2.x.
Support for parallel execution
The biggest change in 5.0 is support for parallel execution in Node.js via the
jasmine package. Parallel execution imposes some constraints on both test
suites and reporters, and as a result not everyone will be able to adopt it
without making changes. See Running Specs in Parallel
for more information.
Changes to global error handling in browsers
Previous versions of Jasmine detected unhandled exceptions and unhandled promise
rejections in browsers by installing a window.onerror handler. 5.0 and later
use addEventListener instead. This means that Jasmine will no longer override
any error handler that your code installs prior to startup. It also means that
you can no longer override Jasmine’s global error handling by setting
window.onerror. If you need to override Jasmine’s global error handling, use
spyOnGlobalErrors.
Using addEventListener allows Jasmine to provide better error information in
many cases. However, some browsers limit the information that’s provided to
error listeners when the source of the error was loaded from a file:// URL. If
you’re using the standalone distribution, you may find it easier to debug
unhandled exceptions and promise rejections if you load Jasmine via a web
server. An easy way to do this is to run npx serve from the directory
containing
SpecRunner.html.
Changes to Env#execute
Jasmine 5.0 completes the migration of Env#execute to async/await. Most users
don’t need to care about this because they either don’t call Env#execute
directly or use it in a “fire and forget” fashion. However, anyone who’s either
passing a callback to Env#execute or catching exceptions from it may need to
make changes.
Before:
try {
env.execute(null, function () {
// Handle completion
});
} catch (e) {
// Handle failures to start
}
After:
try {
const jasmineDoneInfo = await env.execute();
} catch (e) {
// Handle failures to start, which are now delivered via promise rejection
// rather than synchronous throw
}
Note to library authors
The “after” form works with jasmine-core 4.0.0 and later, or 3.9.0 and later
if you ignore the value that the promise is resolved to.
node_boot.js removal
This change mainly affects authors of libraries that wrap jasmine-core in
Node.js, not end users. Prior to 5.0, the boot function used to
initialize jasmine-core in Node was provided via jasmine-core/node_boot.js
and also exported on the jasmine-core module itself. node_boot.js no longer
exists in 5.0.
Before:
const boot = require('jasmine-core/node_boot.js');
After:
const boot = require('jasmine-core').boot;
The “After” version should work in all versions of jasmine-core that support
Node.js.