Closed michalsn closed 1 year ago
In the constructor of RouteCollection
, the loadRoutes()
method should be called?
That would solve the problem, but I've never done anything related to routes, so I don't know how such a change would affect the rest of the code.
In normal use cases, there is no change because loadRoutes() should be called (and is called now) right after the instantiation of RouteCollection.
But the existing tests for the framework would fail, because some tests expect the RouteCollection does not have any route right after the instantiation.
I found a bug #8024 in a test and the framework code.
It may be better to change to call loadRoutes()
in the constructor.
But many existing tests for the framework fail, so it seems better to change it in 4.5
just to be on the safe side
How about adding loadRoutes()
to the resetServices()
? Would that help with failing framework tests?
Oh, that might be better. As for RouteCollection, I think it would be preferable to have no route at instantiation.
Oh, it doesn't work.
Services::routes()->loadRoutes()
creates the Request instance because RouteCollection
depends on Request.
And hack like $_SERVER['HTTP_HOST'] = 'adm.example.com';
for testing does not work in the test method,
because the Request is already created in setUp().
As you probably already know, the workaround is to call Services::routes()->loadRoutes()
after resetServices()
in the test code.
Yeah... maybe we should just promote this as a permanent solution. Not sure what others think about it.
This is not a bug, and you need to call loadRoutes()
if you need.
I sent a PR like that: #8047
I can live with that, thanks!
PHP Version
8.2
CodeIgniter4 Version
4.4.1 and develop
CodeIgniter4 Installation Method
Composer (using
codeigniter4/appstarter
)Which operating systems have you tested for this bug?
macOS
Which server did you use?
cli
Database
irrelevant
What happened?
Using
resetServices()
in tests causes named routes to fail.Steps to Reproduce
Routes.php
Sample.php - sample library
SampleTest.php - sample test
Expected Output
Passing tests.
Anything else?
If we comment out the line with
$this->resetServices();
, then all tests will pass.