Intern client.js does not use the packages definition from the config file, so cannot resolve dojo/_base/declare

StackOverflow https://stackoverflow.com/questions/21910992

  •  14-10-2022
  •  | 
  •  

Question

I've been fighting with Intern for quite a while, to test both server code (following these recommendations) and client code (tradionnal app, as defined on this project of mine, for example).

The Intern config file contains:

loader: {
    packages: [
        { name: 'dojo', location: './libs/dojo' },
        { name: 'server', location: './server' }
    ]
},

However, the location of the dojo package is always ignored. The reported error is:

$ node node_modules/intern/client.js config=intern suites=server/model/tests/News
Defaulting to "console" reporter
Error: Failed to load module dojo/_base/declare from <root>/dojo/_base/declare.js (parent: server/model/Ne
ws)
    at <root>\node_modules\intern\node_modules\dojo\dojo.js:742:12
    at fs.js:207:20
    at Object.oncomplete (fs.js:107:15)

I redacted for the <root> part to simplify the output.

My current workaround is to copy the dojo folder at the <root> level but that's inconvenient...

My current folder structure is:

<root>
    |- client
    |- libs
    |    |- dojo
    |    |- ...
    |- node_modules
    |    |- grunt
    |    |- intern
    |    |- ...
    |- server
         |- dao
         |    |- tests
         |- model
         |    |- tests
         |- ...

Where am I wrong?

Update: Everywhere I read (like here), the configuration is specified as a MID, not as a filename with an extension. When I run my command with "config=intern.js" the configuration is correctly processed (I've hacked "client.js" to log the config content). Note: I'm running Node.js/Intern on a Windows machine...

Additional information: Here is the minimum content required to process my tests.

define({
    loader: {
        packages: [
            { name: 'dojo', location: './libs/dojo' },
            { name: 'server', location: './server' }
        ]
    },
    suites: [ 'server/allTests' ]
});
Était-ce utile?

La solution

The issue I faced is related to the loader:

  • If the config file intern.js is at the root level, the command MUST contain the extension: config=intern.js;
  • If the config file is in a subfolder like tests then the extension MUST be omitted in the command: config=tests/intern.

This happens in intern/client.js, line 38, with the call to the Node.js require() function.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top