pestphp / pest

Pest is an elegant PHP testing Framework with a focus on simplicity, meticulously designed to bring back the joy of testing in PHP.
https://pestphp.com
MIT License
9.46k stars 341 forks source link

[Bug]: PhpStorm generated Regex filtering out the tests when using 3.x-dev release #1151

Closed CamKem closed 1 month ago

CamKem commented 5 months ago

What Happened

I have come across an issue when using PhpStorm UI to press the arrow which runs a method level test. It generates a --filter flag with a Regex. In 2.34.7 (Current Release), it works fine, the test will be found, run & pass. However, when using the v3.0.0 (3.x-dev) the action will return an Exit Code 0 with no test run, as it filters out the method level running of the test suite.

This is the Regex it is generating: --filter=/^(P\)?Tests\NewTest::it\sthis\sis\sa\stest(\swith\s(data\sset\s\".\"|(.))(\s\/\s(data\sset\s\".\"|(.)))*(\s#\d+)?)?$/

Expected Result

I have attached screenshots of the test being run with the --debug flag.

How to Reproduce

  1. Initialise a new project.
  2. With composer install "pestphp/pest": "^v3.0.0" which will install 3.x-dev branch.
  3. Write a basic Pest test & press the green arrow in the UI to run the test
  4. The regex it generates filters out the method level testing using the PhpStorm UI
  5. Switch to "pestphp/pest": "^v2.34.7" and it runs fine.

Sample Repository

No response

Pest Version

3.x-dev

PHP Version

8.3.6

Operation System

macOS

Notes

I have attached screenshots of the same test being run using both the v2.x & v3.x with the --debug flag.

Screenshot 2024-05-03 at 8 20 56 pm Screenshot 2024-05-03 at 8 28 07 pm
smirok commented 4 months ago

Looks like __pest_evaluable_ prefix isn't prepended to test names anymore.

That's why the filter --filter=/^(P\)?Tests\NewTest::it\sthis\sis\sa\stest(\swith\s(data\sset\s"."|(.))(\s/\s(data\sset\s"."|(.)))*(\s#\d+)?)?$/ doesn't work in Pest 3.x-dev, but the filter --filter=/^(P\)?Tests\NewTest::__pest_evaluable_it\sthis\sis\sa\stest(\swith\s(data\sset\s"."|(.))(\s/\s(data\sset\s"."|(.)))*(\s#\d+)?)?$/ works just fine

Do you have any ideas, is it a random regression that will be fixed for the Pest v3 release or is it a implication of new features for v3 release?

CamKem commented 4 months ago

Looks like __pest_evaluable_ prefix isn't prepended to test names anymore.

That's why the filter --filter=/^(P\)?Tests\NewTest::it\sthis\sis\sa\stest(\swith\s(data\sset\s"."|(.))(\s/\s(data\sset\s"."|(.)))*(\s#\d+)?)?$/ doesn't work in Pest 3.x-dev, but the filter --filter=/^(P\)?Tests\NewTest::__pest_evaluable_it\sthis\sis\sa\stest(\swith\s(data\sset\s"."|(.))(\s/\s(data\sset\s"."|(.)))*(\s#\d+)?)?$/ works just fine

Do you have any ideas, is it a random regression that will be fixed for the Pest v3 release or is it a implication of new features for v3 release?

Thanks for looking into it on the PhpStorm/Jetbrains side, I'm not certain of the direction for v3 regarding the prefix, so I let @nunomaduro know you had responded & he mentioned he'll check it out when he gets a chance, so we can resolve the issue.

nunomaduro commented 1 month ago

fixed.