0.17.0

Released Released on August 29, 2016

Overview:

  • The desktop application has been completely redesigned. We have moved from a tray application to a standard dock application. The list of projects is now in the same window as the list of tests in a project. As each test runs, the application highlights the currently running spec and displays the browser version running. The configuration of a project is now displayed in its own tab. There is now a Desktop Menu where you can logout, check for updates, or view help links.

  • The test runner has been rebuilt from the ground up in React.js. The left side of the runner called the reporter is now a separate application. This, as well as other changes, markedly improved the performance of running tests. Your tests will now run faster. This will also enable you to test your application in full screen. Additionally this paves the way for being able to spawn multiple browsers at once and synchronize testing across them. This also means we'll be able to support mobile browsers. The UI for doing this hasn't been implemented but the vast majority of the work to accomplish this is done now.

  • We have rewritten the entire proxy layer of the Cypress server to finally fix all the problems with CORS.

Breaking Changes:

  • You cannot cy.visit() two different super domains within a single test. Example: cy.visit('https://cypress.io').visit('https://anotherwebsite.com'). There shouldn't be any reason you ever need to do this in a single test, if you do, you should make these two separate tests.

Features:

  • All CORS related issues should finally be fixed now. Cypress now internally switches to the domain that you used in your cy.visit(). This means that the correct domain will display in the URL based on the application currently under test. Your application's code will run under the current domain at all times. Previously we implemented an endless amount of hacks and internal translations to figure out the domain you were supposed to be on without actually being on the domain. This caused code to behave different and caused subtle issues. Those issues should now be resolved. The entire proxy layer has been rewritten to handle all HTTPS certificates flawlessly, continue to inject (even on HTTPS pages), and still know when to automatically bypass injection so you can open other tabs while testing in Cypress. These new proxy changes also unlock the ability to do things like allowing or blocking specific 3rd party domains, or even be able to stub not just XHR's but any kind of HTTP request.

  • window.fetch now works correctly. Stubbing these does not yet work but it is now possible for us to implement stubbing in a future version. Addresses #95.

  • The list of tests now automatically refresh when test files are renamed, deleted, or added. In addition, because the list of tests is now displayed in the desktop application, we now synchronize the state of the current running spec.

  • cy.visit() has better error messages. Cypress now programmatically determines why a cy.visit() failed and gives you a ridiculously accurate error message. Addresses #138.

  • cy.visit() now displays redirects and any cookies set.

  • The currently running test is now scrolled into view. This behavior can be turned off by scrolling in the Command Log or selecting to disable auto-scroll at the top of the Command Log. Addresses #194

  • Tests in the Command Log now automatically expand when specific commands take longer than 1000ms to run. Previously when running more than 1 test we did not expand commands until a test failed. Now they will be expanded and automatically collapsed whenever a single command is taking a long time to finish.

  • We now have full blown subdomain support. This means you can now navigate to a subdomain either directly via a cy.visit() or by navigating in your application naturally (such as clicking an <a>).

  • cy.request() now attaches and sets cookies transparently on the browser. Even though the browser will not physically make the request, we automatically apply outgoing cookies as if the browser had made the request. Additionally we will automatically set cookies on the browser based on the response. This means you can use cy.request() to bypass not just CORS but handle things like automatically logging in without having to manually perform these actions in the UI.

  • We now handle HTTP request errors much better. Previously if your web server sent us back a 4xx or 5xx response we would automatically send back a 500. Now we transparently pass these through.

  • Improved dozens of error messages.

  • .debug() output has been improved, and you can now easily inspect the current command's subject.

  • Clicking the URL in the header of the runner now opens that URL in a new tab.

Bugfixes:

  • Fixed URL proxy issue with subdomains. Fixes #183.

  • Viewport size maximum has been decreased from 3001px to 3000px and minimum has been increased from 199px to 200px to match error messages. Fixes #189

  • WebSockets are now correctly proxied through HTTPS and through subdomains different than the current domain under test.

  • Stopped .debug() from accidentally mutating subjects.

  • Cypress now correctly injects and handles pages which are missing a <head>, a <body>, or even an <html> tag. Previously it would bomb on pages missing these tags.

  • All commands with a long message (such as assertions) are automatically scaled down in font size and truncated properly. In addition, assertions will correctly bold the expected and actual values.

Misc:

  • cypress run no longer requires being logged in.

  • Renamed configuration option commandTimeout to defaultCommandTimeout. Cypress will transparently rewrite this if you have it in your cypress.json, so you don't have to do anything.

  • Renamed onConsole and onRender Command Log options to consoleProps and renderProps. We still support the older property names for backwards compatibility.

  • Added support for a command's message or renderProps.message to use markdown.

  • The default value of port within a project's global configuration has changed from 2020 to now being a random open port. You can still configure a specific port if needed within the configuration.

  • We have upgraded the Chromium that runs headlessly on cypress run to version 51.

  • The internal version of node which is built into Cypress is now 6.1.0.

  • Cypress .js files are no longer minified to make them easier to debug.

  • We are cleaning up internal __cypress cookies more so they won't get in the way of testing your application.

  • We now opt into gzip handling instead of forcing requests to omit it.

  • The runner is now responsive. It will correctly scale down URLs on smaller screen sizes instead of looking completely broken in CSS. We also designed a much better loading indicator.

  • Added button to the reporter that focuses the Test Runner and shows the list of tests.

  • The reporter now updates the duration every 100ms instead of only when a test changes.

  • In the reporter, suites that are pending or contain only pending tests have the blue "pending" indicator on the left instead of the white "processing" indicator.