bahmutov / cypress-split

Split Cypress specs across parallel CI machines for speed
MIT License
220 stars 24 forks source link

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

Open SergeyVolynkin opened 1 year ago

SergeyVolynkin commented 1 year ago

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:

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 commented 1 year ago

@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 🤔

bahmutov commented 1 year ago

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

SergeyVolynkin commented 1 year ago

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

SergeyVolynkin commented 1 year ago

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 commented 1 year ago

Will be on stand-by 🙂, @bahmutov

bahmutov commented 1 year ago

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.

SergeyVolynkin commented 1 year ago

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.