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.
(not blocking 0.3.0)
Add OS X to the Travis buildTravis has been having OS X issues lately, making debugging these errors a little harder
Add diff support to all existing reporters- Create/finish DOM reporter
- Support flaky tests via first-class retries
- This is a requirement to self-host the runner
Movethallium/match
andthallium/assert
implementations out of corethallium/match
is useful on its ownThird-party assertions should be able to build off the same basic assertion primitives without depending onthallium
The assertions' core primitives are already fairly stable
Addt.hasReporter()
so the CLI can detect no reporter set and add the appropriate default.- Support failable tests
- You may want to run a buggy test while still not letting it fail. It helps you know which tests are buggy, and to just not run them if they are
- Add a
t.run()
option to run or skip these
- Move
t.only
to at.run()
option, deprecate it altogether- Now that
t.only
is detected at test run time, this is way easier to do, and it just makes more sense here than as a setter - Also, accept an
except
option.
- Now that
- Remove all the previously deprecated methods/etc.
- Expose
thallium
as globalt
in bundle, tack existingtl.*
exports onto it- Expose
thallium/assert
asassert
instead - Don't expose
require("thallium")
- Expose
- Transition to TypeScript internally
- I'm having enough of the highly uninformative
TypeError: foo has no method bar
,TypeError: Cannot read property 'bar' of undefined
,TypeError: object #<Object> is not a function
, etc. (At least Node 6 gives the variable name...) - I get arrow functions and classes for free, without having to deal with Babel's monstrosity
- Downleveled async functions will drastically simplify both the runner and all the reporters
- It'll be a lot easier when most of the deprecated dynamic stuff like test inheritance is finally removed
- I'm having enough of the highly uninformative
- Add some promise-aware assertions
- Move
exports.files
config option tot.files
- Change
exports.thallium
to default export - Ignored by core, but will mildly simplify CLI interface
- Will make parallel interface much more consistent
- Change
- Allow full name matching of
t.only
- Feature parity with most other heavy frameworks
- Add
t.runOptions
getter/setter
(not blocking 0.4.0)
- Trim off internal stack traces when sending errors to reporters
- Add file watching support
- Integrate with Karma
- Add parallel testing support
- This will involve a secondary child config
- This will require a dedicated worker pool
- Parallelism must be an option
- 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 out of core
- 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:
-
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