jest-dynalite icon indicating copy to clipboard operation
jest-dynalite copied to clipboard

Typescript based configuration doesn't work when using simple preset setup

Open derolf opened this issue 3 years ago • 7 comments

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.

derolf avatar Nov 04 '21 14:11 derolf

What's your jest setup, are you using babel jest? Can I see you babel config?

freshollie avatar Nov 04 '21 15:11 freshollie

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?

freshollie avatar Nov 04 '21 15:11 freshollie

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.

derolf avatar Nov 04 '21 21:11 derolf

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

freshollie avatar Nov 04 '21 23:11 freshollie

As a suggestion it might be better to allow ES6 module configuration in the 'Simple' setup (and deprecate CommonJS) in the next major release.

mikemaccana avatar May 04 '22 10:05 mikemaccana

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.

freshollie avatar May 04 '22 10:05 freshollie

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)

revmischa avatar May 27 '22 01:05 revmischa