This list is in a very rough chronological order, with whatever's done struck through. If you want to complete any of these yourself, feel free to send me a PR! 😄
Do note that it isn't necessarily comprehensive, although I try to keep it somewhat up to date.
See the changelog.
Note that as of this version, only the primary API of the previous version will be supported as much as feasibly possible through thallium/migrate
. Reporter and plugin APIs will not such have a wrapper available, but may use the utilities in thallium/migrate/support
to use while transitioning.
Remove all the previously deprecated methods/etc.Removereflect.own*
properties and make them parasitically inherited from their parent, to avoid costly lookups (already done for attempts)
Add--respawn-as
to allow respawning via a binary other than the default (e.g. Electron)This will force a respawn using a PATH lookup if necessary
Add--env
to allow setting environment on startup, before any respawning occursMaket.only
at.run()
optionNow thatt.only
is detected at test run time, this is way easier to do, and it just makes more sense here than as a setterAlso, accept askip
option to skip certain tests.
Exposethallium
as globalt
in bundle, tack existingtl.*
exports onto itExposethallium/assert
as globalassert
insteadDon't exposerequire("thallium")
Exposethallium/migrate/support
ast.support
Return in thet.run()
promise a result object of various statisticsAdd some promise-aware assertions (inclean-assert
)Moveexports.files
config option tot.files
Changeexports.thallium
to default exportIgnored by core, but will mildly simplify CLI interfaceWill make eventual parallel interface much more consistent
- Allow full name matching of
only
/skip
option- Detected via no array
- Feature parity with most other heavy frameworks
Addt.options
getter/setter for default run (not CLI) options- Add some useful things for test generation and reporters like getting the full test name
- Make reports backed by a tree, and convert the public API to expose only getters
- Abstracts away the internal representation
- Reduce reporter GC
Cache the settings for child tests after they are re-lockedThis gets rid of all the tree climbing nonsense that currently existsThis will streamline settings a lot more
- Add file watching support
- Just invoke the CLI on each change. Way easier than trying to clean up
node_modules
, and you get more easily reproduced runs - Mocha's magical behavior isn't helpful when dealing with globals (I've had enough pains in this repo already)
- Just invoke the CLI on each change. Way easier than trying to clean up
Add the ability to programmatically skip a test before it completesRequired for integration testst.skip()
/reflect.skip()
throws an opaque non-error to skip a testDeprecatet.testSkip
(and shim inthallium/migrate
)
Expose a detachedreflect
viat.reflect
Mainly for easier testing/etc.
Load bundle automatically, and implementdata-*
attribute options- Add
timeouts
boolean run option (defaulttrue
) to disable timeouts globally- Timeouts are then reported as
Infinity
- Timeouts are then reported as
- Add
slow
boolean run option (defaulttrue
) to disable slow thresholds globally- Slow thresholds are then reported as
Infinity
- Slow thresholds are then reported as
- Add
color
boolean run option (default system-dependent) to enable/disable colors- Also provide this info to reporters per-report
Maket.only
a getter/setterAllow reporters to be set as string referencesChanget.reporter
to accept either a function or an array.
(not blocking 0.4.0)
- Move to TypeScript/Webpack internally
- Can make library a lot smaller
- Can export both
.js
and.mjs
bundles - Rollup can't be used because I need multiple entry points
- Dynamic types are starting to become a productivity killer
- Now, all non-internal
lib/*
reads only exist for legacy reasons - Some ES6 syntax is zero-cost (e.g. arrow functions,
for ... of
with arrays)
- Incrementally migrate into Lerna-powered monorepo
- Blocked on core TypeScript migration
- Will migrate inbound modules to TypeScript
- Trim off internal stack traces when sending errors to reporters
- Integrate with Karma
- Add parallel testing support
- This will involve a secondary child config
- This will require a dedicated worker pool
- Parallelism must be adjustable, but off by default
- Investigate CLI initialization perf issues
- The 0.4 changes will likely slow the initialization down further
- I/O performance is one major concern
- File watching will make this critical
- Self-host this repo's tests
- It's beginning to stabilize at the API level
- Might open up an early 1.0
- Create pathway for Mocha migration
- Add first-class support for multiple test groups and test group dependencies
- I see this a lot in Java circles, but not in JS circles
- I could already use this to some degree here (I already frequently disable the end-to-end tests in normal development)
- There must be a way to keep a test out of the default group
- Add ability to denote inter-test dependencies, and skip ones that depend on failed tests
- Sometimes, a test error can result in others starting with invalid state
- It's sometimes easier to do integration-style tests, testing each step along the way (particularly useful for testing state machines)
- This is something no existing test framework I'm aware of actually offers in any capacity
- This could be done by adding a per-group boolean flag (skip rest of group if test in own group or group dependency fails)
- Reimplement
util-inspect
for browsers based on Node's currentutil.inspect
, since that is completely untested and completely unaware of ES6 😟- This will be published as a separate module
- Create a nice REPL driver for Node, in addition to the CLI*
- This will just be a module + sugar binary, so you can use it with any language
* That's something from Lisp-land I really wish was here...
Here's the nice-to-haves, and so these are in no particular order:
-
Improve the existing DOM runner's styling
- It's admittedly ugly, and has a lot of room for improvement
-
Write a few plugins/utilities for
describe
/it
(likely trivial), etc- This will include more reporters as well
-
Write lots of blog posts. 😄
- Why another testing framework (we already have Mocha, Jasmine, QUnit, AVA, Tape and friends, Nodeunit, among others)
- Why this uses code for configuration (Gulp vs Grunt, Browserify vs Webpack, ESLint vs JSHint+JSCS, etc.)
- Why this tries to infer so much (it's not as magical as it seems, and magic isn't inherently evil)
- Why such a high focus on flexibility
- etc.
-
Write an alternative matching algorithm to be based off of the ES2015 Iterable (
Symbol.iterator
) protocol, etc.- This may likely also include the proposed async iteration protocol.
- This will be out of core
-
Use the patience diff for larger data sets, since it deals with those a little more readably, a plus for data-heavy integration/end-to-end tests (this repo has some of those)
- There doesn't appear to be a JS port yet, and algorithm documentation is scarce, so I'd have to write it myself, and it will likely be challenging