codeigniter4 / codeigniter4/CodeIgniter4
Bug: [4.4] Failed tests on Windows.
- 主要語言
- PHP
- 星號
- 6k
- 分支
- 2k
- 平均合併
- 1 天 11 小時
- 30 天內合併 PR
- 73
描述
### PHP Version
7.4
### CodeIgniter4 Version
4.4
### CodeIgniter4 Installation Method
Git
### Which operating systems have you tested for this bug?
Windows
### Which server did you use?
apache
### Database
_No response_
### What happened?
After PR https://github.com/codeigniter4/CodeIgniter4/pull/7380 in Windows CodeIgniter\CodeIgniterTest::testRun404Override() and similar tests fail.
Instead of the expected response from the 404 error handler, a welcome_page is returned (from App\Controller\Home::index)
```
$ d:\1\CodeIgniter4\vendor\bin\phpunit.bat tests\system\CodeIgniterTest.php
PHPUnit 9.6.7 by Sebastian Bergmann and contributors.
Runtime: PHP 8.1.1
Configuration: D:\1\CodeIgniter4\phpunit.xml.dist
Warning: No code coverage driver available
...FFFF............................ 35 / 35 (100%)
Time: 00:04.175, Memory: 28.00 MB
There were 4 failures:
1) CodeIgniter\CodeIgniterTest::testRun404Override
Failed asserting that '\r\n
[cut]
D:\1\CodeIgniter4\tests\system\CodeIgniterTest.php:124
2) CodeIgniter\CodeIgniterTest::testRun404OverrideControllerReturnsResponse
Failed asserting that '\r\n
[cut]
...etc
```
This is happening in this code snippet due to the difference in paths (directory separators) between Windows and UNIX.
https://github.com/codeigniter4/CodeIgniter4/blob/d9fd9d5e9dc34bcaa249c0df42c5d371ca45e582/system/Router/RouteCollection.php#L323-L332
```
$files
array(2) {
[0]=>
string(59) "D:\1\CodeIgniter4\app\Config\Routes.php"
[1]=>
string(70) "D:\1\CodeIgniter4\tests\_support\Config\Routes.php"
}
$this->routeFiles
array(1) {
[0]=>
string(59) "D:\1\CodeIgniter4\app\Config/Routes.php" <--- DS
}
```
Due to the difference in paths, the comparison fails and the file with routes from the application is loaded, thereby adding the route that is accessed in the tests.
### Expected Output
Since the framework can be used not only on UNIX, the tests must also pass on Windows. This issue is just a special case and fixing by changing the requested resource in the tests will not solve the problem. That is, the behavior should be like in UNIX, that is, the route from the application should not be loaded.
### Anything else?
In other tests related to file/directory paths, there are also errors on Windows due to the directory separator.
貢獻指南
研究方向
Start with system/Router/RouteCollection.php around the linked lines and tests/system/CodeIgniterTest.php, then run vendor/bin/phpunit.bat tests/system/CodeIgniterTest.php on Windows. Trace the route-file path comparison and ensure the application routes are not loaded for these tests; the affected Windows tests and related path tests should pass.
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- php
- 領域
- backend, testing
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 42/100