Closed timfish closed 7 years ago
Interesting, I'm going to guess this is being caused by the usage of require
but I'll take a deeper look by the end of this week
I'm using SystemJS and transpiling from TypeScript. Below is my full config:
module.exports = function (config) {
config.set({
basePath: './',
frameworks: ['systemjs', 'jasmine'],
systemjs: {
configFile: 'www/config.js',
config: {
paths: {
"*": "*",
"src/*": "src/*",
"github:*": "www/jspm_packages/github/*",
"npm:*": "www/jspm_packages/npm/*",
"typescript": "node_modules/typescript/lib/typescript.js",
"systemjs": "node_modules/systemjs/dist/system.js",
'system-polyfills': 'node_modules/systemjs/dist/system-polyfills.js'
},
packages: {
'src': {
defaultExtension: 'ts'
}
},
transpiler: 'typescript',
typescriptOptions: {
"module": "system",
"emitDecoratorMetadata": true,
"experimentalDecorators": true
}
},
serveFiles: [
'src/**/*.*',
'www/jspm_packages/**/*.js'
]
},
files: [
'src/**/*.spec.*'
],
exclude: [],
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Electron'],
singleRun: false
});
};
I've created a basic repository which reproduces this issue. https://github.com/timfish/karma-electron-test
I have also noticed that I no longer see the electron window when the tests are running.
I've worked out what's going wrong. I don't know what has changed (electron or karma) but the tests are being loaded in an iframe
which don't have access to all the electron apis.
Simply adding the following to my karma.conf.js
file gets it all working again:
client: {
runInParent: true,
useIframe: false
}
Can you override the defaults in the plugin?
By the way, I think require
can be fixed by setting NODE_PATH
.
https://github.com/electron/electron/issues/2414
Thanks for your work on this so far
This plugin doesn't configure Karma in any way -- we force the useIframe
convention via documentation:
https://github.com/twolfson/karma-electron/tree/5.1.1#getting-started
While runInParent
might work, I feel like it could lead to undesired edge cases (e.g. continuous runs could have leaks between tests). I would like to leave this issue open so we can fix the iframe
scenario
The linked Electron issue, electron/electron#2414, states NODE_PATH
is a way to fix absolute node_modules
(e.g. require('underscore')
) but there is no fix for relative node_modules
(e.g. require('./utils')
) so we still need to overwrite require
Starting at my attempt to reproduce the issue
Our repository dependencies seem to have process.type
defined as renderer
. That's:
"electron": "~1.3.3",
...
"karma": "~1.1.0",
Going to try out your repo now to see if we can reproduce from that. Then we'll binary search for the source
While cloning/installing dependencies for the repro repo, we verified that latest Karma and Electron show process.renderer
(albeit console.log
stopped working so we need to look into that...):
"electron": "~1.6.2",
...
"karma": "~1.5.0",
Update: console.log
was caused by log level changes in Karma https://github.com/karma-runner/karma/pull/2540
Cool, we got a successful error reproduction with the repo you provided
Okay, we have figured out the source of the issue. It's due to missing the required configuration from the README. We missed that during the initial bug report. To repair the issue, add the following to your karma.conf.js
:
preprocessors: {
'**/*.js': ['electron']
},
client: {
useIframe: false
},
Reference documentation:
https://github.com/twolfson/karma-electron/tree/5.1.1#getting-started
Using the latest version of
karma-electron
, I was hoping all the tests would be run in a full render process. However the following test:Fails with
ReferenceError: process is not defined
Here is the full output:
I can see an electron process spawning up and closing after.