pateketrueke / yrv

Your routing vibes! (for Svelte)
https://svelte.dev/repl/0f07c6134b16432591a9a3a0095a80de
161 stars 9 forks source link

Jest tests started to fail after `main` package.json property got removed #78

Closed ilyavf closed 3 years ago

ilyavf commented 3 years ago

I am using Jest with svelte-jester to test my Svelte components. Previous versions (0.0.42 prior to chore: new tooling commit) of yrv which had main property were all working well, but when recently the main property was removed here the tests started to fail with:

Cannot find module 'yrv' from 'src/App.svelte'

 > 3 |   import { Router, Route } from 'yrv'

I wonder why main property got removed, and if you have any suggestion on how to test a Svelte app with yrv with Jest.

ilyavf commented 3 years ago

I guess this can be solved by using a custom resolver function for Jest. E.g. this works:

package.json:

{
  ...,
  "jest": {
    "resolver": "./resolver.js",
    ...
  }
}

resolver.js:

module.exports = (request, options) => {
  // Call the defaultResolver, so we leverage its cache, error handling, etc.
  return options.defaultResolver(request, {
    ...options,
    // Use packageFilter to process parsed `package.json` before the resolution (see https://www.npmjs.com/package/resolve#resolveid-opts-cb)
    packageFilter: pkg => {
      return {
        ...pkg,
        // Alter the value of `main` before resolving the package
        main: pkg.svelte || pkg.main,
      };
    },
  });
};