twolfson / karma-electron

Karma launcher and preprocessor for Electron
The Unlicense
59 stars 21 forks source link

Cannot find module 'path' #27

Closed j-a-m-l closed 7 years ago

j-a-m-l commented 7 years ago

I'm trying to add some tests for ARK desktop wallet. In this project, the Angular.js app is requiring Node.js modules (on package.json), so using karma-electron is a way to loading those modules.

I've changed the preprocessors and browsers of the Karma.js configuration, but I'm having problems:

An error "Cannot find module 'path'" is triggered from node_modules/mocha/mocha.js:1. That files re-implements the require function at the beginning.

twolfson commented 7 years ago

I can't seem to find the karma-electron integration on any branch. Can you link me to it?

j-a-m-l commented 7 years ago

Sorry @twolfson , I didn't push any commit with my attempts.

But now, since you asked about it, I've pushed a branch to my forked repo with some temporal changes: https://github.com/j-a-m-l/ark-desktop/tree/debug-karma-electron

twolfson commented 7 years ago

The issue is you're missing the useIframe: false. We need this to properly use require across multiple levels of node modules. Closing issue eagerly

j-a-m-l commented 7 years ago

Thanks @twolfson.

That wasn't right, but now the errors is: "Cannot read 'concat' of undefined". Replacing

module.paths = module.paths.concat(__require('module')._nodeModulePaths('{{!karmaBasePath}}'));

with

module.paths = (module.paths || []).concat(__require('module')._nodeModulePaths('{{!karmaBasePath}}'));

would fix it.

But it would trigger other problem: "Maximum call stack size exceeded".

twolfson commented 7 years ago

I looked into this a bit and that error is being caused by angular-mocks.js overwriting Node.js' definition of module which is leading to a sticky situation

After disabling angular-mocks, I'm seeing the "Maximum call stack size exceeded" between our window.require definition and Mocha's wrapper. I'm looking into why this doesn't happen in our other frameworks

twolfson commented 7 years ago

Also, fwiw, I disabled coverage so the stack traces are more legible -- especially via the "Debug" window (requires disabling --single-run and opening via "Debug" button)

twolfson commented 7 years ago

It looks like the issue is being caused by 4.0.0 version of mocha (released about 1 month ago) which overwrites the global require. Downgrading to 3.5.3 fixed the issue and moved to a new one for Angular in the repo's domain:

Electron 1.8.1 (Node 8.2.1) ERROR
  Uncaught TypeError: module is not a function
  at services/network.service.js:23

which corresponds to:

describe('networkService', function () {
  beforeEach(module('arkclient.services'))

It looks like there's already a Mocha require= related issue so I'd suggest subscribing to that and using a downgraded version for now:

https://github.com/mochajs/mocha/issues/3091

j-a-m-l commented 7 years ago

Thank you very much for all your help.