У меня есть классы репозитория, которые реализуют определенный интерфейс, а также расширяют базовый класс для конкретной базы данных.
базовый класс:
abstract class CouchDB
{
protected $db;
public function __construct(Sag $db)
{
$this->db = $db;
}
private function call_get($url) {...} //this is a wrapper for $db->get()
}
производный класс:
class CouchExpression extends CouchDB implements ExpressionInterface
{
public function __construct(Sag $db)
{
parent::__construct($db);
}
}
спецификация:
class CouchExpressionSpec extends ObjectBehavior
{
public function let($db)
{
$db->beADoubleOf('\Sag');
$this->beConstructedWith($db);
}
public function it_gets_returned_by_its_id()
{
$this->db->get('...')->willReturn([]);
}
}
При запуске PHPSpec я получаю: property db not found
Есть ли способ исправить это, кроме как установить для свойства значение public
?
После установки public
я получаю: call to a member function willReturn() on a non-object.
Так что я не могу запустить ->willReturn()
на $this->db
Но почему? При выполнении этого в let
методе теста это работает. Но не все тесты требуют возврата одних и тех же данных...
Как мне запустить это?