mirror of
https://github.com/element-hq/element-web
synced 2024-11-25 02:35:48 +03:00
cd1cf09dc9
It seems that a number of the tests had started failing when run in Chrome. They were fine under PhantomJS, but the MegolmExport tests only work under Chrome, and I need them to work... Mostly the problems were timing-related, where assumptions made about how quickly the `then` handler on a promise would be called were no longer valid. Possibly Chrome 55 has made some changes to the relative priorities of setTimeout and sendMessage calls. One of the TimelinePanel tests was failing because it was expecting the contents of a div to take up more room than they actually were. It's possible this is something very environment-specific; hopefully the new value will work on a wider range of machines. Also some logging tweaks.
178 lines
6 KiB
JavaScript
178 lines
6 KiB
JavaScript
// karma.conf.js - the config file for karma, which runs our tests.
|
|
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
|
|
/*
|
|
* 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.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
// the name of the test file. By default, a special file which runs all tests.
|
|
//
|
|
// TODO: this could be a pattern, and karma would run each file, with a
|
|
// separate webpack bundle for each file. But then we get a separate instance
|
|
// of the sdk, and each of the dependencies, for each test file, and everything
|
|
// gets very confused. Can we persuade webpack to put all of the dependencies
|
|
// in a 'common' bundle?
|
|
//
|
|
var testFile = process.env.KARMA_TEST_FILE || 'test/all-tests.js';
|
|
|
|
process.env.PHANTOMJS_BIN = 'node_modules/.bin/phantomjs';
|
|
|
|
function fileExists(name) {
|
|
try {
|
|
fs.statSync(gsCss);
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// try find the gemini-scrollbar css in an npm-version-agnostic way
|
|
var gsCss = 'node_modules/gemini-scrollbar/gemini-scrollbar.css';
|
|
if (!fileExists(gsCss)) {
|
|
gsCss = 'node_modules/react-gemini-scrollbar/'+gsCss;
|
|
}
|
|
|
|
|
|
module.exports = function (config) {
|
|
config.set({
|
|
// frameworks to use
|
|
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
|
frameworks: ['mocha'],
|
|
|
|
// list of files / patterns to load in the browser
|
|
files: [
|
|
testFile,
|
|
gsCss,
|
|
|
|
// some images to reduce noise from the tests
|
|
{pattern: 'test/img/*', watched: false, included: false,
|
|
served: true, nocache: false},
|
|
],
|
|
|
|
// redirect img links to the karma server
|
|
proxies: {
|
|
"/img/": "/base/test/img/",
|
|
},
|
|
|
|
// list of files to exclude
|
|
//
|
|
// This doesn't work. It turns out that it's webpack which does the
|
|
// watching of the /test directory (karma only watches `testFile`
|
|
// 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: [
|
|
// '**/.#*'
|
|
// ],
|
|
|
|
// preprocess matching files before serving them to the browser
|
|
// available preprocessors:
|
|
// https://npmjs.org/browse/keyword/karma-preprocessor
|
|
preprocessors: {
|
|
'test/**/*.js': ['webpack', 'sourcemap']
|
|
},
|
|
|
|
// test results reporter to use
|
|
// possible values: 'dots', 'progress'
|
|
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
|
reporters: ['progress', 'junit'],
|
|
|
|
// 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,
|
|
|
|
junitReporter: {
|
|
outputDir: 'karma-reports',
|
|
},
|
|
|
|
webpack: {
|
|
module: {
|
|
loaders: [
|
|
{ test: /\.json$/, loader: "json" },
|
|
{
|
|
test: /\.js$/, loader: "babel",
|
|
include: [path.resolve('./src'),
|
|
path.resolve('./test'),
|
|
]
|
|
},
|
|
],
|
|
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/,
|
|
|
|
// 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$/,
|
|
],
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
// alias any requires to the react module to the one in our
|
|
// path, otherwise we tend to get the react source included
|
|
// twice when using npm link.
|
|
react: path.resolve('./node_modules/react'),
|
|
|
|
'matrix-react-sdk': path.resolve('test/skinned-sdk.js'),
|
|
'sinon': 'sinon/pkg/sinon.js',
|
|
},
|
|
root: [
|
|
path.resolve('./src'),
|
|
path.resolve('./test'),
|
|
],
|
|
},
|
|
devtool: 'inline-source-map',
|
|
},
|
|
|
|
webpackMiddleware: {
|
|
stats: {
|
|
// don't fill the console up with a mahoosive list of modules
|
|
chunks: false,
|
|
},
|
|
},
|
|
|
|
browserNoActivityTimeout: 15000,
|
|
});
|
|
};
|