2016-03-29 00:29:49 +02:00
|
|
|
// karma.conf.js - the config file for karma, which runs our tests.
|
|
|
|
|
2016-03-24 23:59:01 +01:00
|
|
|
var path = require('path');
|
|
|
|
|
2016-03-28 18:36:22 +02:00
|
|
|
/*
|
2016-03-29 00:29:49 +02:00
|
|
|
* We use webpack to build our tests. It's a pain to have to wait for webpack
|
|
|
|
* to build everything; however it's the easiest way to load our dependencies
|
|
|
|
* from node_modules.
|
2016-03-28 18:47:06 +02:00
|
|
|
*
|
2016-03-31 01:48:46 +02:00
|
|
|
* If you run karma in multi-run mode (with `npm run test-multi`), it will watch
|
|
|
|
* the tests for changes, and webpack will rebuild using a cache. This is much quicker
|
|
|
|
* than a clean rebuild.
|
|
|
|
*
|
2016-03-28 18:47:06 +02:00
|
|
|
* TODO:
|
2016-03-29 00:35:36 +02:00
|
|
|
* - can we run one test at a time?
|
2016-03-28 18:36:22 +02:00
|
|
|
*/
|
2016-03-29 00:29:49 +02:00
|
|
|
|
|
|
|
process.env.PHANTOMJS_BIN = 'node_modules/.bin/phantomjs';
|
|
|
|
|
2016-03-24 23:59:01 +01:00
|
|
|
module.exports = function (config) {
|
|
|
|
config.set({
|
2016-03-28 18:36:22 +02:00
|
|
|
// frameworks to use
|
|
|
|
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
2016-03-24 23:59:01 +01:00
|
|
|
frameworks: ['mocha'],
|
2016-03-28 18:36:22 +02:00
|
|
|
|
|
|
|
// list of files / patterns to load in the browser
|
2016-03-24 23:59:01 +01:00
|
|
|
files: [
|
2016-03-28 23:59:34 +02:00
|
|
|
'test/tests.js',
|
|
|
|
],
|
|
|
|
|
|
|
|
// list of files to exclude
|
2016-03-31 01:48:46 +02:00
|
|
|
//
|
|
|
|
// This doesn't work. It turns out that it's webpack which does the
|
|
|
|
// watching of the /test directory (possibly karma only watches
|
|
|
|
// tests.js itself). Webpack watches the directory so that it can spot
|
|
|
|
// new tests, which is fair enough; unfortunately it triggers a rebuild
|
|
|
|
// every time a lockfile is created in that directory, and there
|
|
|
|
// doesn't seem to be any way to tell webpack to ignore particular
|
|
|
|
// files in a watched directory.
|
|
|
|
//
|
|
|
|
// exclude: [
|
|
|
|
// '**/.#*'
|
|
|
|
// ],
|
2016-03-28 18:36:22 +02:00
|
|
|
|
|
|
|
// preprocess matching files before serving them to the browser
|
|
|
|
// available preprocessors:
|
|
|
|
// https://npmjs.org/browse/keyword/karma-preprocessor
|
2016-03-24 23:59:01 +01:00
|
|
|
preprocessors: {
|
2016-03-28 18:36:22 +02:00
|
|
|
'test/tests.js': ['webpack', 'sourcemap']
|
2016-03-24 23:59:01 +01:00
|
|
|
},
|
2016-03-28 18:36:22 +02:00
|
|
|
|
|
|
|
// test results reporter to use
|
|
|
|
// possible values: 'dots', 'progress'
|
|
|
|
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
2016-03-29 00:35:36 +02:00
|
|
|
reporters: ['progress', 'junit'],
|
2016-03-28 18:36:22 +02:00
|
|
|
|
|
|
|
// web server port
|
|
|
|
port: 9876,
|
|
|
|
|
|
|
|
// enable / disable colors in the output (reporters and logs)
|
|
|
|
colors: true,
|
|
|
|
|
|
|
|
// level of logging
|
|
|
|
// possible values: config.LOG_DISABLE || config.LOG_ERROR ||
|
|
|
|
// config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
|
|
|
logLevel: config.LOG_INFO,
|
|
|
|
|
|
|
|
// enable / disable watching file and executing tests whenever any file
|
|
|
|
// changes
|
|
|
|
autoWatch: true,
|
|
|
|
|
|
|
|
// start these browsers
|
|
|
|
// available browser launchers:
|
|
|
|
// https://npmjs.org/browse/keyword/karma-launcher
|
|
|
|
browsers: [
|
|
|
|
'Chrome',
|
|
|
|
//'PhantomJS',
|
|
|
|
],
|
|
|
|
|
|
|
|
// Continuous Integration mode
|
|
|
|
// if true, Karma captures browsers, runs the tests and exits
|
|
|
|
singleRun: true,
|
|
|
|
|
|
|
|
// Concurrency level
|
|
|
|
// how many browser should be started simultaneous
|
|
|
|
concurrency: Infinity,
|
|
|
|
|
2016-03-29 00:35:36 +02:00
|
|
|
junitReporter: {
|
|
|
|
outputDir: 'karma-reports',
|
|
|
|
},
|
|
|
|
|
2016-03-24 23:59:01 +01:00
|
|
|
webpack: {
|
|
|
|
module: {
|
|
|
|
loaders: [
|
|
|
|
{ test: /\.json$/, loader: "json" },
|
2016-03-28 23:59:34 +02:00
|
|
|
{
|
|
|
|
test: /\.js$/, loader: "babel",
|
|
|
|
include: [path.resolve('./src'),
|
|
|
|
path.resolve('./test'),
|
|
|
|
],
|
|
|
|
query: {
|
2016-03-31 17:38:56 +02:00
|
|
|
// we're using react 5, for consistency with
|
|
|
|
// the release build, which doesn't use the
|
|
|
|
// presets.
|
|
|
|
// presets: ['react', 'es2015'],
|
2016-03-28 23:59:34 +02:00
|
|
|
},
|
2016-03-28 18:36:22 +02:00
|
|
|
},
|
2016-03-24 23:59:01 +01:00
|
|
|
],
|
|
|
|
noParse: [
|
|
|
|
// don't parse the languages within highlight.js. They
|
|
|
|
// cause stack overflows
|
|
|
|
// (https://github.com/webpack/webpack/issues/1721), and
|
|
|
|
// there is no need for webpack to parse them - they can
|
|
|
|
// just be included as-is.
|
|
|
|
/highlight\.js\/lib\/languages/,
|
2016-03-31 01:48:46 +02:00
|
|
|
|
|
|
|
// also disable parsing for sinon, because it
|
|
|
|
// tries to do voodoo with 'require' which upsets
|
|
|
|
// webpack (https://github.com/webpack/webpack/issues/304)
|
|
|
|
/sinon\/pkg\/sinon\.js$/,
|
2016-03-24 23:59:01 +01:00
|
|
|
],
|
|
|
|
},
|
|
|
|
resolve: {
|
|
|
|
alias: {
|
|
|
|
'matrix-react-sdk': path.resolve('src/index.js'),
|
2016-03-28 23:59:34 +02:00
|
|
|
'sinon': 'sinon/pkg/sinon.js',
|
2016-03-24 23:59:01 +01:00
|
|
|
},
|
2016-03-31 01:48:46 +02:00
|
|
|
root: [
|
|
|
|
path.resolve('./src'),
|
|
|
|
path.resolve('./test'),
|
|
|
|
],
|
2016-03-24 23:59:01 +01:00
|
|
|
},
|
2016-03-28 19:19:37 +02:00
|
|
|
devtool: 'inline-source-map',
|
2016-03-24 23:59:01 +01:00
|
|
|
},
|
|
|
|
});
|
|
|
|
};
|