This repository was archived by the owner on Mar 24, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Testing this plugin
Raimondo Mancino edited this page May 23, 2022
·
2 revisions
We use Jest test suites.
However, since we're using Yarn, simply running jest may not work.
To support npm modules, the actual command we use for our tests is this:
$ yarn node --experimental-vm-modules $(yarn bin jest)This is the code I used for one of the test suites:
test(
'Bundles sass sources from import statements',
async function testSASSImport() {
await expect(new Promise((ok, fail) => {
const plugin = new ESBuildSASSModulesPlugin();
const dir = p.dirname(p.resolve(PATH_SAMPLE_SIMPLE_SCSS, '../../'));
const fakeEsb =
{ async onResolve(filter, fn) {
const
{ path: pathSCSS
, namespace: namespaceSCSS
} = await fn(
{ path: PATH_SAMPLE_SIMPLE_SCSS
, kind: 'import-statement'
, importer: p.resolve(PATH_SAMPLE_SIMPLE_JS)
, resolveDir: dir
}
);
expect(pathSCSS).toBe(p.resolve(PATH_SAMPLE_SIMPLE_SCSS));
expect(namespaceSCSS)
.toBe(ESBuildSASSModulesPlugin.namespace);
const
{ path: pathSASS
, namespace: namespaceSASS
} = await fn(
{ path: PATH_SAMPLE_SIMPLE_SASS
, kind: 'import-statement'
, importer: p.resolve(PATH_SAMPLE_SIMPLE_JS)
}
);
expect(pathSASS).toBe(p.resolve(PATH_SAMPLE_SIMPLE_SASS));
expect(namespaceSASS)
.toBe(ESBuildSASSModulesPlugin.namespace);
}
, onLoad(filter, fn) {
ok(fn);
}
, async resolve(path) {
if(path === PATH_SAMPLE_SIMPLE_SCSS) {
return { path: p.resolve(PATH_SAMPLE_SIMPLE_SCSS) };
}
if(path === PATH_SAMPLE_SIMPLE_SASS) {
return { path: p.resolve(PATH_SAMPLE_SIMPLE_SASS) };
}
}
};
expect(() => plugin.setup(fakeEsb)).not.toThrow();
})
.then(chainTestSASSbuild(
PATH_SAMPLE_SIMPLE_SCSS,
PATH_SAMPLE_SIMPLE_SCSS_COMPILED
))
.then(chainTestSASSbuild(
PATH_SAMPLE_SIMPLE_SASS,
PATH_SAMPLE_SIMPLE_SASS_COMPILED
))).resolves.toBeTruthy();
}
);Basically, I used a fake esbuild object to test the correctness of the main behavior.
test(
'Builds a simple program',
async function testSimpleBuild() {
await testBuild(
buildSimple(),
PATH_SAMPLE_SIMPLE_JS_COMPILED
);
}
);The testBuild() will chain an esbuild result (in this case, returned from buildSimple()) to a check that compares the produced outfile with a known compiled file (PATH_SAMPLE_SIMPLE_JS_COMPILED, in this case).
The list of PATH constants is found in test/constants.js. You can find a set of useful utils for tests in test/utils.js
The Squirrel Network team