cypress-split icon indicating copy to clipboard operation
cypress-split copied to clipboard

`Webpack Compilation Error` when using `paths` aliases in Typescript (running `empty-4-of-4.cy.js` spec)

Open SergeyVolynkin opened this issue 2 years ago • 7 comments

Hi @bahmutov, thank you very much for this project!

Could you please suggest how to make cypress-split work when using paths aliases in tsconfig?

i.e. given the /cypress/tsconfig.json:

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["es5", "dom"],
    "types": ["cypress", "@testing-library/cypress", "node"],
    "baseUrl": "./",
    "paths": {
      "#/*": ["../src/*"],
      "#tests/*": ["../tests/*"]
    }
  },
  "include": ["**/*.ts"]
}

setting up running the cypress-split per readme, when having only 3 spec files: (running on local Mac OS machine)

# errors out with 
# Error: Webpack Compilation Error
# Module not found: Error: Can't resolve '#tests/mock-rest-api-server' in '/Users/…/…/…/…/…/cypress/support'
# …
# The spec file that runs is `empty-4-of-4.cy.js`

SPLIT=4 SPLIT_INDEX=3 yarn cypress run

and running the following succeds:

# runs succesfully
# The spec file that runs is `notifications.cy.ts` 
SPLIT=4 SPLIT_INDEX=1 yarn cypress run

Additional info:

  • If I change the source code of node_modules/cypress-split/src/index.js to use empty-spec.cy.ts and run SPLIT=4 SPLIT_INDEX=3 yarn cypress run again, I get more info on the error:
  Running:  empty-4-of-4.cy.ts                                                              (1 of 1)

Oops...we found an error preparing this test file:

  > ../../../../../../var/folders/p0/npm2s71j2bz2s8pm770p55700000gp/T/empty-4-of-4.cy.ts

The error was:

Error: Webpack Compilation Error
[tsl] ERROR
      TS18002: The 'files' list in config file 'tsconfig.json' is empty.

SergeyVolynkin avatar Oct 05 '23 09:10 SergeyVolynkin

@bahmutov If I change the source code of node_modules/cypress-split/src/index.js to use '/Users/…/…/…/…/…/cypress/e2e' instead of os.tmpdir():

// node_modules/cypress-split/src/index.js

const tempFilename = path.join(
-  os.tmpdir(),
  `empty-${splitIndex + 1}-of-${splitN}.cy.js`,
)

const tempFilename = path.join(
+  '/Users/…/…/…/…/…/cypress/e2e', // i.e. placing the `empty-4-of-4.cy.js` where other cypress specs are located
    `empty-${splitIndex + 1}-of-${splitN}.cy.js`,
)

it solves the problem 🤔

SergeyVolynkin avatar Oct 05 '23 09:10 SergeyVolynkin

Ughh, to solve this, I would need a small repo with a reproducible example

bahmutov avatar Oct 05 '23 18:10 bahmutov

Absolutely! Will prepare a quick repo @bahmutov today (thank you for a quick response!)

SergeyVolynkin avatar Oct 06 '23 04:10 SergeyVolynkin

Hi @bahmutov, extracted minimal reproducible example https://github.com/SergeyVolynkin/cypress-split-issue-105-ts-types#root-cause-analysis. Added root cause analysis into README.md

Please let me know what can be the fix in your code, I can open PR into https://github.com/bahmutov/cypress-split accordingly

SergeyVolynkin avatar Oct 06 '23 06:10 SergeyVolynkin

Will be on stand-by 🙂, @bahmutov

SergeyVolynkin avatar Oct 11 '23 05:10 SergeyVolynkin

I would not be on stand by because I have a lot of other stuff to do. If you can please open a pull request with a fix instead.

bahmutov avatar Oct 11 '23 11:10 bahmutov

No worries, thank you @bahmutov! It's a very niche corner case where there are more runners than test files. Can be solved by manually creating empty(or TODO) spec files.

SergeyVolynkin avatar Nov 03 '23 16:11 SergeyVolynkin