Hello everyone,
I'm trying to write some unit tests on some services/classes that uses Models but i cannot simulate any data. The only way I found to do so is to use real database which is not the best practice for units...
I tried to use AspectMock\Test::double to do mock find and findFirst methods but totally ignored during tests...
Here is my test
<?php
use AspectMock\Test as test;
class ArticleDeserializerTest extends \Codeception\Test\Unit
{
protected function _before()
{
test::double(Article::class, [ 'findFirst' => date_create() ]);
}
/**
* @dataProvider getData
*/
public function testDenormalize($data, $valid)
{
if ($valid) {
$this->assertInstanceOf(Article::class, (new ArticleDeserializer)->denormalize($data));
} else {
$this->expectExceptionMessage('Undefined index:');
(new ArticleDeserializer)->denormalize($data);
}
}
public function getData()
{
$article = json_decode(file_get_contents(APP_PATH . '/cli/commands/Fixtures/sources/articles-103699094818044.json'), true);
$articleBadURL = $article;
$articleBadURL['publicationUrl'] = 'not-a-valid-url';
$articleMissing = $article;
unset($articleMissing['publicationUrl']);
return [
[ $article, true ],
[ $articleBadURL, true ],
[ $articleMissing, false ],
];
}
}
In this example Article::findFirst()
never returns a \Datetime
.
I tried with codeception and phpunit, same result.
Please help.