Currently at 1.23.1
The 1.x releases up until this point have already provided the 2.0 API (initially as a front for the old code and gradually refactored to be "real").
The following functionality that was deprecated in QUnit 1.x has been removed in QUnit 2.0:
* non-global assert methods – Use `assert.equal` on `assert` parameter from `test` handler, not the global method `equal()`.
* non-global test suite method – Use `QUnit.test` and `QUnit.module`, not `module()` or `test()`.
* non-global control flow methods – Use `assert.async()` or return a promise from `QUnit.test`, don't use `QUnit.stop()` and `QUnit.start()`.
* custom assert methods - Use `this.pushResult` inside an assertion, not `QUnit.push`.
* Event listener – Use `QUnit.someEventName( handler )` instead of assigning a function directly, like `QUnit.someEventName = handler`.
The deprecated features discouraged in the above list have been removed in the 2.0 release. They will have to be migrated before the upgrade.
A few new features have since been introduced as well:
* Core: Improved async handling.
* Core: Improved performance of assertion code.
* Core: Support nested modules (sub-module grouping), per-test and per-module hooks (before/beforeEach).
* Assert: Add assert.verifySteps
* Assert: Add assert.step
* Assert: Add assert.timeout for setting per-test timeout durations
* CLI: Introduce QUnit CLI
* .. more at <https://github.com/qunitjs/qunit/blob/2.4.0/History.md>