7.0.0
Released 04/05/2021
Summary:
🎉 Introducing the Cypress Component Test Runner - now in alpha. Today's release includes a brand new test runner designed to replace your Node-based component tests. Our Component Test Runner tests your components in the browser, just like a user would. And, since it runs in the browser, you get to debug your components using your favorite developer tools. Read our Component Testing Guide for more details.
Breaking Changes:
Please read our Migration Guide which explains the changes in more detail and how to change your code to migrate to Cypress 7.0.
- We introduced several breaking changes to cy.intercept(). See the cy.intercept() docs for full usage examples. Breaking changes:
- Request handlers supplied to
cy.intercept()
are now matched starting with the most recently defined request interceptor. This allows users to override request handlers by callingcy.intercept()
again. This matches the previous behavior that was default incy.route()
. Addresses #9302. cy.intercept()
now automatically parses more JSON MIME types, including 'application/vnd.api+json'. You can now removeJSON.parse(req.body)
orJSON.parse(res.body)
from some tests that previously required it. Addresses #14763.- Falsy values (with the exception of
undefined
) supplied as the body of aStaticResponse
tocy.intercept()
will now be JSONified and sent as the body. Previously, an empty string was sent instead. Addresses #15234 and #14205. - The
matchUrlAgainstPath
RouteMatcher
property has been removed fromcy.intercept()
. - The "substring match" from
cy.intercept()
URL matching has been removed. Previously, a URL would match if it contained the supplied string anywhere. Now, the URL (including querystring) only matches if it is an equality match or a minimatch. - The
delay
option for StaticResponses used withcy.intercept()
has been removed. Please go back to using thedelayMS
option. Addresses #15255. cy.route2()
was previously aliased tocy.intercept()
. Now the aliascy.route2()
has been removed. Please update usage ofcy.route2()
tocy.intercept()
. Addressed in #14709.
- Request handlers supplied to
- Component tests have been migrated to use a dedicated test runner and are bundled differently. See the Migration Guide for full examples on how to migrate. Addressed in #14479.
- Component tests will not be executed when running
cypress open
orcypress run
. Now, they need to be executed by runningcypress open-ct
orcypress run-ct
. Addressed in #15701. experimentalComponentTesting
must be removed from yoru configuration file,cypress.json
by default, or it will throw an error. Addressed in #15701.- The
file:preprocessor
event is no longer used to compile component tests. Now, adev-server:start
event must be registered.
- Component tests will not be executed when running
- Cypress now catches uncaught errors and fails the test even if the application under test has defined
window.onerror
. Addresses #8802. - Cypress now fails tests if there is an unhandled promise rejection in the application under test. Unhandled rejections will trigger the
uncaught:exception
event with the promise as the third argument. Addresses #243. - Cypress now throws an error if the application under test redirects more than 20 times. The number of times allowed to redirect is configurable via the
redirectionLimit
config. Addresses #14445. - The default preprocessor now targets a more modern version of ECMAScript. Addressed in #15274.
- We now enable
contextIsolation
by default in the Electron browser. You can override this option if needed within thebefore:browser:launch
API. Addressed in #15493. Cypress.moment()
has been removed. Please migrate to a different datetime formatter. See our recipe for example replacements. Addresses #8714.- The bundled Node.js version was upgraded from
12.18.3
to14.16.0
. This could change the behavior of code within thepluginsFile
when using the bundled Node.js version of Cypress. Addressed in #15292. - Installing Cypress on your system now requires Node.js 12+. Addresses #9545.
- The default headless browser window size has been increased to 1920x1080 pixels to capture High-definition videos and screenshots. Addresses #15752, #15730, and #15481.
Features:
- A command log entry is now displayed when there is an uncaught exception or unhandled rejection. Addresses #8236.
- We added several features to cy.intercept(). See the cy.intercept() docs for full usage examples. Addressed in #14543. New features:
- There are new events on the req object for
cy.intercept()
includingbefore:response
,response
, andafter:response
. - Response handlers (supplied via event handlers or via
req.continue(cb)
) supplied tocy.intercept()
will be called in reverse order untilres.send
is called or until there are no more response handlers. - A new option,
middleware
, has been added to theRouteMatcher
type. If true, the supplied request handler will be called before any non-middleware request handlers. - A new function,
req.continue(cb)
, is available on request objects yielded bycy.intercept()
. It is functionally the same asreq.reply(cb)
- the request will stop propagating to other event handlers, will be sent outgoing, and the response will be handled by cb. cy.intercept()
can now be called with a new overload:cy.intercept(url, routeMatcher, handler)
.routeMatcher
will be merged withurl
, and the handler is required.
- There are new events on the req object for
cy.visit()
can now visit pages withapplication/xhtml*
content-type. Addresses #15738.- You can now pass runner specific configuration in order to pass different configuration values to
component
tests versuse2e
tests. Addressed in #15526. - There's a new keyboard shortcut (
ctrl/cmd + f
) to search spec files in the Test Runner based on your OS. Addresses #6229. - You can now create a new spec file directly from the Test Runner in the Desktop. Addressed in #15335.
cy.tick()
now accepts alog
option. Addresses #15180.- The Cypress proxy now adds a
keep-alive
header to all proxy responses. Addressed in #15292 - Cypress no longer forces specific
NODE_OPTIONS
. Addressed in #15292
Bugfixes:
- The
response.body
ofcy.intercept()
is now correct after stubbing a response usingres.send({ fixture })
in areq.continue
callback or abefore:response
orresponse
handler. Addressed in #14543. - Fixed an issue where only the first matching alias for a route would yield a response object on
cy.wait()
. Fixes #14522. .click()
will no longer fail with "coordsHistory must be at least 2 sets of coords" when specifying{ multiple: true }
. Fixes #3738.- Cypress now checks visibility correctly when an element has CSS "position: sticky". Fixes #14938.
- After selecting a project in global mode and clicking the back button, Cypress will no longer crash. Fixes #15089.
- Errors
Refused to apply style
are gone from the console inopen-ct
during Component Testing. Addressed in #15661. - Some memory leaks were fixed in
@cypress/vue
. Addressed in #15275.
Misc:
- The types for
set-cookie
allowstring[]
, so the header's type has been changed to reflect this. Addresses #15419. - The type definition for
cy.writeFile()
now allows 4 arguments. Addresses #15353. .then()
will show the correct type when raw HTMLElements are provided. Addresses #14875- The Cypress Studio icon now displays properly for tests with long titles. Addresses #15182.
- There were some minor improvements made to the UI when setting up a project in the Test Runner. Addressed in #15665.
Dependency Updates