ionic-team / stencil

A toolchain for building scalable, enterprise-ready component systems on top of TypeScript and Web Component standards. Stencil components can be distributed natively to React, Angular, Vue, and traditional web developers from a single, framework-agnostic codebase.
https://stenciljs.com
Other
12.4k stars 775 forks source link

bug: __mocks__ copied to output target #5781

Open mrtnmgs opened 1 month ago

mrtnmgs commented 1 month ago

Prerequisites

Stencil Version

4.18.0

Current Behavior

Stencil copies over mocks directories to dist and throws warnings about duplicate mocks. The mocks are ./src/global/services/__mocks__ and ./src/global/__mocks__ Stencil's console warning:

jest-haste-map: duplicate manual mock found: functions
  The following files share their name; please delete one of them:
    * <rootDir>\src\global\__mocks__\functions.tsx
    * <rootDir>\dist\collection\global\__mocks__\functions.js
    * 
jest-haste-map: duplicate manual mock found: http-service
  The following files share their name; please delete one of them:
    * <rootDir>\src\global\services\__mocks__\http-service.tsx
    * <rootDir>\dist\collection\global\services\__mocks__\http-service.js

I wondered if I wasn't supposed to write the mocks in TypeScript, but same thing with .js files:

jest-haste-map: duplicate manual mock found: functions
  The following files share their name; please delete one of them:
    * <rootDir>\src\global\__mocks__\functions.js
    * <rootDir>\dist\collection\global\__mocks__\functions.js

jest-haste-map: duplicate manual mock found: http-service
  The following files share their name; please delete one of them:
    * <rootDir>\src\global\services\__mocks__\http-service.js
    * <rootDir>\dist\collection\global\services\__mocks__\http-service.js

I couldn't find a config option that would allow to explicitly exclude these directories.

Expected Behavior

__mocks__ directories should be excluded when copying files to build directories

System Info

Windows, npm 9.7.2

Steps to Reproduce

create file src/global/functions.tsx and matching mock src/global/__mocks__/functions.tsx. run npm test.

Code Reproduction URL

https://github.com/mrtnmgs/mockbug

Additional Information

No response

alicewriteswrongs commented 1 month ago

Hey @mrtnmgs thanks for reporting this, I was just able to confirm that the files in the __mocks__ directory are being copied over. This isn't specific behavior to that directory though - any code in src/ will be copied to the dist output target by Stencil actually. So I think in order to change this behavior we'd need to add an ignore option or something.

I'm going to label this a feature request so we can gauge community interest in such a feature!

mrtnmgs commented 1 month ago

Thanks @alicewriteswrongs. That feature sounds nice, but right now things don't work properly by default. There's no reason to copy __mocks__ directories over, and it creates an issue. It doesn't sound right to me to ask the user to configure something in order to fix it... Shouldn't __mocks__ directories be ignored by default?

mrtnmgs commented 1 month ago

Closing as this is part of a larger issue, see https://github.com/ionic-team/stencil/issues/5788