特定のインターフェイスを実装し、特定のデータベースの基本クラスを拡張するリポジトリ クラスがあります。
基本クラス:
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
テストのメソッドでこれを行うと、機能します。しかし、すべてのテストで同じデータが返される必要があるわけではありません...
どうすればこれを実行できますか?