Codeception / Codeception

Full-stack testing PHP framework
http://codeception.com
MIT License
4.77k stars 1.3k forks source link

Multi app setup breaks if vendor dependency contains codeception.yml file #6535

Open calvinalkan opened 2 years ago

calvinalkan commented 2 years ago

The following root config

include:
  - src/components/*

Will recursively traverse all directories inside src/components and look for codeception.yml files.

Now I faced the following situation:

A dependent of one component forgot to put codeception.yml into .gitattributes so that it ends up in the directory when installed with composer.

src/components/component-a/vendor/some-dependency/codeception.yml

When running tests for all included suites, codeception will also try to run tests for src/components/component-a/vendor/some-dependency.

This is due to the fact that the include config is passed here as is into Finder::in() from symfony/finder.

This method makes the finder traverse all child directories recursively which leads to src/components/component-a/vendor/some-dependency/codeception.yml getting picked up.

At least I find this behavior confusing. Given the above configuration I expect only direct child directories of src/components to be evaluated by codeception and not the entire tree under src/components.

Possible fixes:

Assuming this is a bug and not intended, there a two ways to fix this.

  1. Limit finder depth to 0, this will include only direct child directories.
  2. Exclude vendor directories from search
Naktibalda commented 2 years ago

How do you avoid version conflicts when components have different versions of the same libraries installed?

calvinalkan commented 2 years ago

@Naktibalda https://github.com/symplify/monorepo-builder

This hoists all vendor deps to the root codeception.yml

calvinalkan commented 2 years ago

@Naktibalda Why is that relevant tho?

Do you think that this is a bug, if yes Ill create a PR.

tacman commented 2 years ago

On a somewhat related note, since it's on the same line (https://github.com/Codeception/Codeception/blob/cbaa347a683bd5d2f44aefeef57aec31989525ea/src/Codeception/Configuration.php#L750-L752), what about allowing .yaml as an extension? .yml seems so Windows-y, even DOS, the 3-letter file extension.