Я ищу лучший способ проверить вызов в API, который я создал.
Мой тест:
/**
* @test
*/
public function it_can_return_a_block()
{
$block = new Block();
$block->type = "MyComp\MyOtherPackage\Widget";
$block->save();
$response = $this->call('GET', 'http://api.mysite.com/blocks?id=1');
$response->assertExactJson([
"id" => 1,
"type" => "MyComp\MyOtherPackage\Widget",
"component" => "widget",
"name" => "My Widget"
]);
}
В блочной модели для этого используется type
атрибут для создания экземпляра MyComp\MyOtherPackage\Widget
, который расширен от другого класса: MyComp\MyPackage\BlockDefintion
, который является абстрактным:
public class Block
{
...
private $definition;
public function getDefinitionAttribute()
{
if(!$this->definition)
{
$this->definition = new $this->type;
}
return $this->definition;
}
public function getNameAttribute()
{
return $this->definition->name;
}
public function getComponentAttribute()
{
return $this->definition->component;
}
...
}
Этот тест работает нормально, если MyComp\MyOtherPackage\Widget
является действительным и может быть создан, но эти условия будутв другом пакете, поэтому я хочу отделить отношения в моем тесте.
Есть ли способ создать какой-нибудь фиктивный класс для использования здесь? Я думал, издевательство, но не уверен, как я могу использовать это в этом случае