Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
karma-electron
Advanced tools
Karma launcher and preprocessor for Electron
This was written to allow for directly testing in Electron where we might want require
to work automatically
Features:
node_modules
, __filename
, relative paths for require
)Requirements:
karma>=1.1.0
to work within electron's
security policy for shared context between parent/child windows
Notices:
electron@0.37.4
and electron@1.3.3
but should support the latest versionelectron
application
electron's
documentation on Selenium and WebDriverWe have corrected inaccuracies with file://
behavior from Electron. For example:
__filename
is now Karma's context.html
require
resolve from Karma's context.html
directoryWe have transferred support for this to the option client.loadScriptsViaRequire
which loads scripts via require
and has the original expected Node.js behavior
For more information, see https://github.com/twolfson/karma-electron/issues/11
On a project that has been set up with karma init
already, install the module via:
# Install our module and `electron`
npm install karma-electron electron
Then, configure the module:
// Inside `karma.conf.js`
browsers: ['Electron']
// If you would like Node.js integration support (e.g. `require`)
// then, you must include this in `preprocessors` and `client`
// DEV: preprocessors is for backfilling `__filename` and local `require` paths
preprocessors: {
'**/*.js': ['electron']
},
// DEV: `useIframe: false` is for launching a new window instead of using an iframe
// In Electron, iframes don't get `nodeIntegration` priveleges yet windows do
client: {
useIframe: false
}
Then, we can run Karma:
karma start
electron
electron
Example:
ELECTRON_BIN=/usr/bin/electron karma start
We support the following configurations:
Object
- Container for configuring child windows loaded from Karma
String
- Override __filename
to be another path (e.g. /path/to/my-index.html
)
__dirname
and module.filename
as those are derived from __filename
__filename
will point to Karma's context.html
Boolean
- Load scripts via require
instead of <script src=
__filename
, __dirname
, and module
to match the script instead of Karma's context.html
false
and we directly load the original scripts contentExample:
module.exports = function (config) {
config.set({
client: {
// DEV: These 2 options aren't typically used together
// This is for demonstration purposes
// Override top level `__filename` to be `/home/.../my-electron-app/index.html`
// where `__dirname` is `/home/.../my-electron-app`
__filenameOverride: __dirname + '/index.html',
// Use `require` instead of `<script src=` to load scripts
loadScriptsViaRequire: true
}
});
};
We support configuration via Karma's custom launcher inheritance:
Array
- List of Chromium flags to alter Electron's behavior
String
- Directory to store cookies/localStorage information
/tmp/karma-5355024
)String
- Path to a main Electron process file to require before calling app.on('ready')
Object
- Parameters to pass to new BrowserWindow
Object
- Parameters to pass to BrowserWindow.loadURL
Example:
module.exports = function (config) {
config.set({
// Specify usage of our custom launcher
browsers: ['CustomElectron'],
// Define a custom launcher which inherits from `Electron`
customLaunchers: {
CustomElectron: {
base: 'Electron',
userDataDir: __dirname + '/.electron',
browserWindowOptions: {
show: true
},
require: __dirname + '/main-fixtures.js'
}
}
});
};
preload
with BrowserWindow
We can add our preload
location via a custom launcher:
module.exports = function (config) {
config.set({
// Specify usage of our custom launcher
browsers: ['CustomElectron'],
// Define a custom launcher which inherits from `Electron`
customLaunchers: {
CustomElectron: {
base: 'Electron',
browserWindowOptions: {
webPreferences: {
preload: __dirname + '/path/to/preload.js'
}
}
}
}
});
};
nodeIntegration
supportIf we're upgrading to Electron@5 or later, then we might run into missing nodeIntegration
support. While it's advised to use preload
, here's a workaround until the transition to preload
is complete
module.exports = function (config) {
config.set({
// Specify usage of our custom launcher
browsers: ['CustomElectron'],
// Define a custom launcher which inherits from `Electron`
customLaunchers: {
CustomElectron: {
base: 'Electron',
browserWindowOptions: {
webPreferences: {
nodeIntegration: true
}
}
}
}
});
};
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint via npm run lint
and test via npm test
.
Support this project and others by twolfson via donations.
http://twolfson.com/support-me
As of Mar 03 2016, Todd Wolfson has released this repository and its contents to the public domain.
It has been released under the UNLICENSE.
FAQs
Karma launcher and preprocessor for Electron
The npm package karma-electron receives a total of 4,643 weekly downloads. As such, karma-electron popularity was classified as popular.
We found that karma-electron demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.