Description
The list of updates planned for Intern 5 is still being determined, but a few things are already known or in progress. As this is a major release there will be a few breaking changes, but we hope to keep those to a manageable level.
You can track Intern 5's development on the project board.
Simplifying development
Intern’s development has been relatively slow for the last few months. A big part of that is maintenance overhead and organization. Intern has more projects than it has people regularly working on it, and keeping up with them was slowing down the development process. A big behind-the-scenes part of the next release therefore involves simplifying the development and maintenance process. We want any potential contributors, including ourselves, to be able to easily setup a full Intern dev environment, make changes, and run tests.
One part of this is consolidating the code base. The core Intern projects (Leadfoot, Dig Dug, and the cli) are all being pulled back into the main Intern repository. These three projects were originally part of a single code base, and have always been closely dependent. Having them together makes development and testing new features much simpler. The non-Intern repositories are being deprecated; while they’ll still receive bug fixes, they may not receive new features, and any new feature requests should come through Intern’s issue tracker. That’s not to say that standalone Dig Dug and Leadfoot are necessarily finished, but future releases would be generated from the code in the Intern repository rather than from separate repositories.
New features
There are a lot of things we want to do with Intern, much more than will fit into the next release (well, assuming we want to actually get the next release out the door). A discovery process is ongoing (take a look at the list in #1080, and feel free to make suggestions!). A few of the more significant features we plan to include are:
- Watch mode (Watch mode #1020), at least a basic version
- Some ability to re-run an executor (Run multiple
intern.run()
with API #919, Run node tests in separate process #803) - A new command line experience (Intern CLI review #1022)
Other big features that may make it in include:
- A tunnel class for directly managing webdriver binaries (Add a tunnel for directly managing webdriver binaries #1072, aka no more Selenium!)
- Parallelization (Enable test sharding (pooled environments) #546)
Once we’ve finished the discovery process we’ll have a firmer idea of what new features will be included.
Other improvements
Along with adding new features, we also want to improve Intern’s existing functionality and fix some annoyances.
- Clean up the public API; don't require users to import deep paths for common things like test interfaces (General Intern API improvements #1041)
- Focus on modern ES6 in documentation and examples; less with the
intern
global, more withimport
(General Intern API improvements #1041, Documentation review #1088) - Improve the consistency of the configuration system (e.g., the rules around property merging, General Intern API improvements #1041)
- Improve the reporting system with easier to access options, fewer redundant reporters, and better default output (Reporters review #1023)
- Improve support for the W3C webdriver standard (WebDriver API improvements #1046)
- Use standard Promises everywhere. The plan is to provide the existing chainable Command API and a similar API based on standard Promises, and to focus on standard promises and async/await going forward. (General Intern API improvements #1041, WebDriver API improvements #1046, Switch to standard Promises #1018)
Breaking changes
As we work to improve Intern, some of the changes may not always be backwards compatible. Breaking changes will include:
- Changed export paths. As part of cleaning up the API, some module locations will change.
- Changed configuration options. Some options will be renamed or restructured to improve configuration consistency. In general we'll deprecate existing config options rather than removing them entirely.
- Switch to native Promises. Async APIs will switch from custom Task and CancellablePromise classes to native Promises.