jest-dynalite
jest-dynalite copied to clipboard
Typescript based configuration doesn't work when using simple preset setup
I am trying to load a typescript config with jest-dynalite.
Something went wrong reading your jest-dynalite-config.ts: Unexpected token 'export'
at readConfig (../../node_modules/.pnpm/[email protected]_c6ac6979dbeefcbbac9c0114ae514571/node_modules/jest-dynalite/dist/config.js:42:15)
at async TestScheduler.scheduleTests (../../node_modules/.pnpm/@[email protected]/node_modules/@jest/core/build/TestScheduler.js:333:13)
Everything else in my project is TypeScript and works fine. I am having a babel.config.json.
What's your jest setup, are you using babel jest? Can I see you babel config?
Also, I assume you are using the preset? It may be that the .ts version of the config only works with the more advanced setups (with setupEnv's). Can you try that?
Thanks for your quick response. Meanwhile, I am using dynalite directly (without jest-dynalite).
I have a setup.ts:
import dynalite from "dynalite";
import * as dynamodb from "@aws-sdk/client-dynamodb";
import * as db from "../src/db";
const dynaliteServer = dynalite({ createTableMs: 0, deleteTableMs: 0, updateTableMs: 0 });
process.env.AWS_REGION = "test";
process.env.AWS_ACCESS_KEY_ID = "test";
process.env.AWS_SECRET_ACCESS_KEY = "test";
beforeAll(async () => {
await new Promise<void>((resolve) => dynaliteServer.listen(0, () => resolve()));
const addr = dynaliteServer.address();
if (!addr || typeof addr === "string") {
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
throw new Error(`${addr}`);
}
db.setDdb(new dynamodb.DynamoDB({ endpoint: `http://localhost:${addr.port}` }));
});
beforeEach(async () => {
await db.ddb.deleteTable({ TableName: "table" }).catch((_) => false);
await db.ddb.createTable({
TableName: "table",
KeySchema: [
{ AttributeName: "pk", KeyType: "HASH" },
{ AttributeName: "id", KeyType: "RANGE" },
],
AttributeDefinitions: [
{ AttributeName: "pk", AttributeType: "S" },
{ AttributeName: "id", AttributeType: "S" },
],
BillingMode: "PAY_PER_REQUEST",
});
});
afterAll(async () => {
await new Promise<void>((resolve) => dynaliteServer.close(() => resolve()));
});
and just link it with: setupFilesAfterEnv: [path.join(__dirname, "test-helpers/setup.ts")], in my jest.config.js.
Cool, you can recreate this with the advanced setup.
I'm going to leave this open whilst I work out what to do with .ts configs
As a suggestion it might be better to allow ES6 module configuration in the 'Simple' setup (and deprecate CommonJS) in the next major release.
I'm not sure that will help? I think the issue is jest doesn't run the modules it imports, when setting up environment, through the transpiler? I think even if I allowed es6 modules jest wouldn't remove any type information from the file so would fail to run.
I get this error too using ES modules and jest-dynalite-config.ts:
Something went wrong reading your jest-dynalite-config.ts: Unexpected token 'export'
I tried renaming the file to jest-dynalite-config.js -
I get the error:
Something went wrong reading your jest-dynalite-config.js: require() of ES Module /Users/cyber/dev/tombo/sequencer/jest-dynalite-config.js from /Users/cyber/dev/sequencer/node_modules/jest-dynalite/dist/config.js not supported.
Instead change the require of jest-dynalite-config.js in /Users/cyber/dev/sequencer/node_modules/jest-dynalite/dist/config.js to a dynamic import() which is available in all CommonJS modules.
at readConfig (node_modules/jest-dynalite/dist/config.js:42:15)
at getDynalitePort (node_modules/jest-dynalite/dist/config.js:52:33)
at exports.default (node_modules/jest-dynalite/dist/setup.js:6:47)
at new DynaliteEnvironment (node_modules/jest-dynalite/dist/environment.js:22:33)