THIS PLUGIN IS NOW PART OF THE OFFICIAL MODULE FEDERATION ORGANIZATION
Bundler agnostic plugins to share federated components for testing purposes.
It aims to work for both vitest
and jest
.
npm i -D https://github.com/ilteoood/native-federation-tests
This module provides two plugins:
This plugin is used to concat the components that will be used in tests.
{
moduleFederationConfig: any; // the same configuration provided to the module federation plugin, it is MANDATORY
additionalBundlerConfig?: TsupOptions; // additional `tsup` build options that will be merged with the one generated by the plugin, default is {}
distFolder?: string; // folder used to store the dist, default is './dist'
testsFolder?: string; // folder where all the files will be stored, default is '@mf-tests'
deleteTestsFolder?: boolean; // indicate if the concatenated components folder will be deleted when the job completes, default is 'true'
}
Note that, for Webpack, the plugin automatically inject the devServer.static.directory
configuration.
This plugin is used to download the concatenated components mock that will be used for tests.
{
moduleFederationConfig: any; // the configuration same configuration provided to the module federation plugin, it is MANDATORY
testsFolder?: string; // folder where all the files have been stored, default is '@mf-tests',
mocksFolder?: string; // folder where the concatenated files will be stored, default is './__mocks__',
deleteTestsFolder?: boolean; // indicate if the tests mock folder will be deleted before the job starts, default is 'true'
}
Vite
// vite.config.ts
import {NativeFederationTestsHost, NativeFederationTestsRemote} from 'native-federation-tests/vite'
export default defineConfig({
plugins: [
NativeFederationTestsRemote({ /* options */ }),
NativeFederationTestsHost({ /* options */ }),
],
/* ... */
server: { // This is needed to emulate the devServer.static.directory of WebPack and correctly serve the zip file
/* ... */
proxy: {
'/@mf-types.zip': {
target: 'http://localhost:3000',
changeOrigin: true,
rewrite: () => `/@fs/${process.cwd()}/dist/@mf-types.zip`
}
},
fs: {
/* ... */
allow: ['./dist']
/* ... */
}
}
})
Rollup
// rollup.config.js
import {NativeFederationTestsHost, NativeFederationTestsRemote} from 'native-federation-tests/rollup'
export default {
plugins: [
NativeFederationTestsRemote({ /* options */ }),
NativeFederationTestsHost({ /* options */ }),
],
}
Webpack
// webpack.config.js
const {NativeFederationTestsHost, NativeFederationTestsRemote} = require('native-federation-tests/webpack')
module.exports = {
/* ... */
plugins: [
NativeFederationTestsRemote({ /* options */ }),
NativeFederationTestsHost({ /* options */ })
]
}
esbuild
// esbuild.config.js
import { build } from 'esbuild'
import {NativeFederationTestsHost, NativeFederationTestsRemote} from 'native-federation-tests/esbuild'
build({
plugins: [
NativeFederationTestsRemote({ /* options */ }),
NativeFederationTestsHost({ /* options */ })
],
})
Rspack
// rspack.config.js
const {NativeFederationTestsHost, NativeFederationTestsRemote} = require('native-federation-tests/rspack')
module.exports = {
/* ... */
plugins: [
NativeFederationTestsRemote({ /* options */ }),
NativeFederationTestsHost({ /* options */ })
]
}
To use it in a host
module, refer to this example.
To use it in a remote
module, refer to this example.