nose icon indicating copy to clipboard operation
nose copied to clipboard

nose does not find tests on Windows due to casing of path

Open tjshewmake opened this issue 4 years ago • 0 comments

The issue I'm experiencing seems to be pinpointed to the following lines of code:

https://github.com/nose-devs/nose/blob/7c26ad1e6b7d308cafa328ad34736d34028c122a/nose/loader.py#L350-L352 Within the above if statement, I see os.path.realpath(os.path.normcase(module_path)) when comparing to path, which is called a little earlier (in line 343) https://github.com/nose-devs/nose/blob/7c26ad1e6b7d308cafa328ad34736d34028c122a/nose/loader.py#L343

The problem is that you can get very different results when you call os.path.realpath(os.path.normcase(<your path>)) vs. os.path.normcase(os.path.realpath(<your path>)), and as a result, the if statement returns False on Windows for me. Here is the log statement:

nose.loader: DEBUG: Load tests from module path C:\jenkins\workspace\my_cli-windows-gerrit-build\src\tests?
nose.loader: DEBUG: path: c:\jenkins\workspace\my_cli-windows-gerrit-build\src\tests os.path.realpath(c:\jenkins\workspace\my_cli-windows-gerrit-build\src\tests): C:\jenkins\workspace\my_cli-windows-gerrit-build\src\tests

The suggested fix is for the if statement on L350 to call os.path.normcase(os.path.realpath(module_path)).startswith(path) to match the method order on L343. I can confirm that after making this change in the source code, all of my tests are detected by nose as expected.

tjshewmake avatar Apr 30 '20 22:04 tjshewmake