Как заставить phpspec оценить мой конструктор
public function __construct(RequestSchemaInterface $requestSchema)
{
$this->schema = $requestSchema->getSchema();
}
Когда я запускаю phpspec для Builder, схема $this-> всегда будет нулевой. При обычном вызове он устанавливает схему. Я получил пусть реализован
function let(RequestSchema $requestSchema)
{
$this->beConstructedWith($requestSchema);
}
Как я могу протестировать методы этого класса, если они используют схему $this->?
1 ответ
Ваш let()
Метод использует заглушку для создания тестируемого объекта. Хотя это рекомендуется, это не обязательно. Вы можете создать реальный объект типа RequestSchema
и использовать его для построения тестируемого класса:
function let()
{
$requestSchema = new RequestSchema();
$this->beConstructedWith($requestSchema);
}
Обновить:
Что касается заголовка вашего вопроса "Как заставить phpspec вычислять мой конструктор": конструктор выполняется, но, потому что вы используете заглушку для $requestSchema
, вызов $requestSchema->getSchema()
внутри конструктора возвращается NULL
,
Вы можете подготовить заглушку, чтобы вернуть что-то еще, когда его метод getSchema()
называется.
Попробуй это:
function let(RequestSchema $requestSchema)
{
// Prepare the stub
$requestSchema->getSchema()->willReturn('something');
// Construct the object under test using the prepare stub
$this->beConstructedWith($requestSchema);
// Verify the constructor initialized the object properties
$this->schema->shouldBe('something');
}