This test pack is made up of a number of mini-typescript projects which include a test suite. As part of the test run, each project is compiled and the test suite run using Karma. So this test pack is different from the comparison test pack in that it executes the compiled code. This test pack is useful for testing expected behaviour. (It's also reassuring to see your code being executed.)
These tests are executed more widely that the comparison tests; we aim to run these against each version of TypeScript defined in our CI build matrices. (Take a look at appveyor.yml
and .travis.yml
for details.)
The execution test pack can be found under /test/execution-tests
. Like the comparison test pack, the execution test pack uses certain conventions. All tests have their own directory under /test/execution-tests
, eg /test/execution-tests/someFeature
. Each test is expected to have a karma.conf.js
file and a webpack.config.js
file.
If a test requires a minimum version of TypeScript then the test directory should be prefixed with the minimum TypeScript version. For example, the 2.0.3_es2016
test requires a minimum TypeScript version of 2.0.3; if the installed version is lower than the test needs then the test will be skipped.
IMPORTANT
In order that the local version of ts-loader is resolved for tests a webpack.config.js
file will need to include this line:
// for test harness purposes only, you would not need this in a normal project
module.exports.resolveLoader = { alias: { 'ts-loader': path.join(__dirname, "../../../index.js") } }
// note that there are 3 ../ here as compared with only 2 for the comparison tests
And likewise the karma.conf.js
will need to reuse this like so:
webpack: {
devtool: 'inline-source-map',
debug: true,
module: {
loaders: webpackConfig.module.loaders
},
resolve: webpackConfig.resolve,
// for test harness purposes only, you would not need this in a normal project
resolveLoader: webpackConfig.resolveLoader
},
Without this, the test won't be able to resolve ts-loader and webpack won't find your TypeScript tests.
It's pretty much your choice what goes in testwise. At present there are only Jasmine tests in place; it should be possible to put any test in place that Karma is compatible with. The test pack also expects a typings.json
file and calls typings install
in each. Be warned, type definitions are not installed until the test framework has been run. So if you're wanting to refactor a test you'll need to typings install
if the requisite typings have not yet been installed. It's possible / probably that this may changed in the future;
particularly to cater for situations where types should be acquired via npm etc.
To run all the tests use:
npm run execution-tests
.
If you would like to run just a single test then:
npm run execution-tests -- --single-test nameOfTest
It's pretty handy to be able to debug tests; for that reason you can run a single test in watch mode like this:
npm run execution-tests -- --single-test nameOfTest --watch
Then you can fire up http://localhost:9876/ and the world's your oyster.