Meteor 3.3.x and meteortesting:mocha/lmieulet:meteor-coverage

Sure.

in package.json, set modern: true

meteor npm remove -D babel-plugin-istanbul
meteor npm i -D swc-plugin-coverage-instrument

in the file swc.config.js:

module.exports = {
  jsc: {
    baseUrl: './',
    experimental: {
      plugins: [
        [
          'swc-plugin-coverage-instrument',
          {
            unstableExclude: [
              '**/node_modules/**',
              '**/.meteor/**',
              '**/packages/**',
              '**/tests/**',
            ],
          },
        ],
      ],
    },
  },
};

run your tests and you should have your coverage. At least, this setup works for me.

3 Likes

I found only a specific version of swc-plugin-coverage-instrument works:

swc-plugin-coverage-instrument@0.0.28

not:

swc-plugin-coverage-instrument@0.0.26
or
swc-plugin-coverage-instrument@0.0.32 (the latest)

At least those two versions crash!

Which rspack and Meteor version have you ?

Meteor 3.3.2 with modern=true

Unless I am mistaken, Meteor 3.3.2 uses swc 1.12.14 so swc_core is 32.0.2.

sw_core dependency for swc-plugin-coverage-instrument@0.0.32 is 47.0.3 So it will not work.

Correct @nachocodoner ?

Yes, you’re right.

Meteor 3.3.2 is fixed to use @swc/core 1.12.14 through a custom NPM package.

With the latest Meteor 3.4-rc.1 I bumped the internal Meteor SWC version to 1.15.3, which uses swc_core v48.0.2, likely compatible with swc-plugin-coverage-instrument@0.0.32.

Upgrading to Meteor 3.4-rc.1 won’t force you to use the Rspack integration, so you can update and still use the Meteor bundler alone. Besides this, I want to mention that adopting Rspack for your app code will make your setup depend on Rspack, which updates SWC on its own schedule.

1 Like

Could any of you help me out?

I made the changes mentioned by @harry73 about swc, however, I’m getting a 500 error. I’m not sure how to proceed

 Export code coverage
 - Out html
 [coverage] export coverage using the following format [ html ] options [ {
   path: '/home/ferjep/yourdnafamily/octopussy/.coverage',
   verbose: true
 } ]
 Write asset: ./base.css
 Write asset: ./block-navigation.js
 Write asset: ./sort-arrow-sprite.png
 Write asset: ./sorter.js
 Write asset: ./prettify.css
 Write asset: ./prettify.js
 (STDERR) Error: Failed to save html report. 500 [object Object]
 (STDERR)     at request (packages/meteortesting:mocha/server.handleCoverage.js:21:11)
 (STDERR)     at processTicksAndRejections (node:internal/process/task_queues:105:5)
 [coverage] export coverage using the following format [ http ] options [ {
   path: '/home/ferjep/yourdnafamily/octopussy/.coverage',
   verbose: true,
   filepath: undefined
 } ]

This is how I’m running it

COVERAGE=1 COVERAGE_VERBOSE=1 COVERAGE_APP_FOLDER=$PWD/ TEST_WATCH=1 COVERAGE_OUT_HTML=1 meteor test --driver-package meteortesting:mocha --settings settings-development.json

package.json (meteor only)

  "meteor": {
    "modern": {
      "transpiler": {
        "verbose": false
      }
    },
    "mainModule": {
      "client": "client/main.js",
      "server": "server/main.js"
    }
  },

Hi,

Which Meteor and swc-plugin-coverage-instrument version do you run?

Meteor 3.3.2 and swc-plugin-coverage-instrument 0.0.32

try with swc-plugin-coverage-instrument 0.0.28

It gets worse I think. I get code errors now

error on boot.js /tmp/meteor-test-run1q6cxtm.302vl/.meteor/local/build/programs/server/app/app.js:107086
const ANDME_FORMAT = (cov_16790224454079739546().s[4]++, await getFormat(‘andme’, ‘v4’, undefined));
^^^^^^^^^

SyntaxError: Unexpected identifier ‘getFormat’
at new Script (node:vm:117:7)
at createScript (node:vm:269:10)
at Object.runInThisContext (node:vm:317:10)
at /tools/static-assets/server/boot.js:414:32
at /tools/static-assets/server/boot.js:502:11
at Function.run (/tmp/meteor-test-run1q6cxtm.302vl/.meteor/local/build/programs/server/tools/tool-env/profile.ts:651:14)
at startServerProcess (/tools/static-assets/server/boot.js:501:17)
at Object. (/tools/static-assets/server/boot.js:506:2)
at Object. (/tools/static-assets/server/boot.js:510:4)
at Module. (node:internal/modules/cjs/loader:1688:14)
at Module.Mp._compile (/tools/static-assets/server/runtime.js:91:21)
at Object.Module._extensions…js (/tools/static-assets/server/runtime.js:125:21)
at Module. (node:internal/modules/cjs/loader:1423:32)
at Module.Mp.load (/tools/static-assets/server/runtime.js:35:31)
at Function._load (node:internal/modules/cjs/loader:1246:12)
at TracingChannel.traceSync (node:diagnostics_channel:322:14)
/tmp/meteor-test-run1q6cxtm.302vl/.meteor/local/build/programs/server/app/app.js:107086

@nachocodoner Could you help me somehow?

I have 2 projects with kind of the same set up and have the same 500 error

Have you tried using the Meteor 3.4-rc.1 version I mentioned above, which bumps SWC to the latest and should include a swc_core version compatible with swc-plugin-coverage-instrument@0.0.32?

If not, and to help you further, I’d need a bit more to reproduce your issue. Could you provide a minimal reproduction repository where I can quickly see the problem and explore a fix?

1 Like

Hi @ferjep

Currently i use Meteor 3.4-beta-11 (with rspack 1.5.8) and swc-plugin-coverage-instrument 0.0.31 without any pb.

For 3.3.2, i need to check again but do not have much time.

1 Like

Thanks you for the responses, once I have some time I’ll try out Meteor 3.4-rc.1 with this project.

I’m currently updating another project with 3.4 but I’m having problems

Just want to say here that you don’t need to add rspack in your project when you upgrade to Meteor 3.4-rc.1. You can focus on test it first with the Meteor bundler as you had with Meteor 3.3.x. Updating to latest Meteor 3.4-rc.1 will ensure swc_core could be latest and have swc-plugin-coverage-instrument@0.0.32 hopefully.

Ah perfect! That’s good to know for a quicker test.

Thanks!

Hi @nachocodoner

I tried Meteor 3.4-rc.1 with Rspack integration and swc-plugin-coverage-instrument@0.0.32 without success. My tests fail with the following error.

It seems Rspack installed 1.6.5 (even 1.6.7) uses swc_core 46.0.3 and not the internal Meteor SWC 1.15.3.

ERROR in ./tests/main.js
    × Module build failed (from builtin:swc-loader):
    ╰─▶   × plugin
          │
          │   x failed to invoke plugin on 'Some("/home/harry/Dev/VueGPX/tests/main.js")'
          │ The version of the SWC Wasm plugin you're using might not be compatible with `builtin:swc-loader`.
          │ The `swc_core` version of the current `rspack_core` is 46.0.3.
          │ Please check the `swc_core` version of SWC Wasm plugin to make sure these versions are within the compatible range.
          │ See this guide as a reference for selecting SWC Wasm plugin versions: https://rspack.rs/errors/swc-plugin-version

I see, the internal Meteor SWC was bumped to 1.15.3 in the last RC, which corresponds to swc_core v48.0.2.

It seems our internal Meteor SWC is now ahead of what Rspack uses, so this mismatch could be the issue. Keeping the internal Meteor SWC at the same or a lower version (swc_core 46.0.3) might solve it. Do you think this is the case?

I’m planning a quick rc.2 to include one fix, and I could add this one as well.

1 Like

My understanding is the following:

swc-plugin-coverage-instrument@0.0.32 need @sw/core 1.15.0 and above because it needs at least swc_core @47.0.0
But I do not know why it seems it is swc_core verson of Rspack that is taken into account.

In Plugin Compatibilty Rspack 1.6.5/7, swc_core is below @47.0.0 and swc-plugin-coverage-instrument@0.0.32 is not listed

My opinion is that we must wait a Rspack release that will bump the swc_core version.

It is new for me so just guessing