# |
Apr 17th 2019, 14:47 |
neon1024 |
Which fixes the value, so when you execute the controller request it can get the right value |
# |
Apr 17th 2019, 14:47 |
neon1024 |
I guess you’ll have to write a fixture then |
# |
Apr 17th 2019, 14:46 |
Coddyx |
$this->Model->get() ? |
# |
Apr 17th 2019, 14:46 |
Coddyx |
oops |
# |
Apr 17th 2019, 14:46 |
Coddyx |
could I mock $this- |
# |
Apr 17th 2019, 14:46 |
neon1024 |
Well if you cached the value, you could mock the cache |
# |
Apr 17th 2019, 14:45 |
Coddyx |
yes |
# |
Apr 17th 2019, 14:45 |
Coddyx |
but I can't find how to mock the db hit |
# |
Apr 17th 2019, 14:45 |
neon1024 |
Wow, so you hit the database for every single request to your application |
# |
Apr 17th 2019, 14:45 |
Coddyx |
So lets say I hit '/' i should assert 503 |
# |
Apr 17th 2019, 14:45 |
Coddyx |
and isInMaintenance checks against a model and returns true or false |
# |
Apr 17th 2019, 14:45 |
Coddyx |
if this->isInMaintenance throw httpexception 503 |
# |
Apr 17th 2019, 14:44 |
Coddyx |
AppController::beforeFilter |
# |
Apr 17th 2019, 14:44 |
neon1024 |
Otherwise you’d need to write a fixture for the data |
# |
Apr 17th 2019, 14:44 |
Coddyx |
My code looks like this |
# |
Apr 17th 2019, 14:44 |
neon1024 |
Or maybe a query param |
# |
Apr 17th 2019, 14:43 |
neon1024 |
Perhaps pass it into the controller |
# |
Apr 17th 2019, 14:43 |
neon1024 |
Perhaps read from a session or cookie |
# |
Apr 17th 2019, 14:43 |
neon1024 |
So you’ll need to just set that manually |
# |
Apr 17th 2019, 14:43 |
neon1024 |
Well you must use the value somewhere right? |
# |
Apr 17th 2019, 14:43 |
Coddyx |
I can show you what I have so far |
# |
Apr 17th 2019, 14:43 |
Coddyx |
I understand, can yo uplease define «set it manually» |
# |
Apr 17th 2019, 14:42 |
neon1024 |
Writing tests for bad code is super hard work |
# |
Apr 17th 2019, 14:42 |
neon1024 |
If you can’t do that then you need to refactor your code to make it more testable |
# |
Apr 17th 2019, 14:42 |
neon1024 |
As I don’t see any value in creating a fixture for it and testing the ORM as well |
# |
Apr 17th 2019, 14:42 |
neon1024 |
Then you’ll probably want to set it manually |
# |
Apr 17th 2019, 14:41 |
Coddyx |
With a boolean in it |
# |
Apr 17th 2019, 14:41 |
Coddyx |
No, the maintenance is actually stored in a database field |
# |
Apr 17th 2019, 14:41 |
neon1024 |
So you could just change that in your test case before dispatching your request |
# |
Apr 17th 2019, 14:41 |
neon1024 |
Well I’d presume you have it as a `Configure::write('maintenance', false)` right? |
# |
Apr 17th 2019, 14:40 |
neon1024 |
So you’ll need a response to assert against |
# |
Apr 17th 2019, 14:40 |
neon1024 |
Which is a response code |
# |
Apr 17th 2019, 14:40 |
neon1024 |
But you said you wanted to assert a 503 |
# |
Apr 17th 2019, 14:40 |
Coddyx |
How should I go about changing the settings? (I'm sorry I am very new to this) |
# |
Apr 17th 2019, 14:40 |
neon1024 |
Which might be boolean for is in maintenance |
# |
Apr 17th 2019, 14:40 |
neon1024 |
If you want to unit test your maintenance method you’d just call it with expected output |
# |
Apr 17th 2019, 14:40 |
neon1024 |
Hence just sending a request and asserting the response |
# |
Apr 17th 2019, 14:39 |
neon1024 |
You’ll want an integration test |
# |
Apr 17th 2019, 14:39 |
neon1024 |
Well that’s a unit test |
# |
Apr 17th 2019, 14:39 |
Coddyx |
In my specific case, the isInMaintenance is a private function called in the beforeFilter of the AppController which is extended by the PagesController (what i want to test) |
# |
Apr 17th 2019, 14:39 |
neon1024 |
Then change the setting and asserts in each |