Как получить mock из ActiveRecord
5 июля 2016
На тостере в комментариях к вопросу спросили, как получить mock ActiveRecord, чтобы он не пытался лезть в базу и возможно ли.
Возможно. В случае PHPUnit делается так:
$post = $this->getMockBuilder('\app\model\Post') ->setMethods(['save', 'attributes']) ->getMock(); $post->method('save')->willReturn(true); $post->method('attributes')->willReturn([ 'id', 'status', 'title', 'description', 'text' ]);
Особенность заключается в том, что перекрыть надо ещё и метод attributes()
потому как ActiveRecord лезет за схемой в базу данных, что нам не нужно.
Комментарии RSS по email OK
Добавьте в cookbook, самое место там.
Добавлю.
Александр, правильно ли я понимаю, что описанный мок полностью исключает поход в БД со стороны AR? Что будет, например, при попытке загрузить relation?
Владислав, начнёт грузить. Чтобы relation перекрыть, нужно ещё немного постараться.
Sam, а как сделать тоже самое для AR из 1го Yii? У меня сходу не получилось сделать нормальный мок.