Использование фиктивного класса для тестирования при необходимости в модели - PullRequest
0 голосов
/ 29 октября 2019

Я ищу лучший способ проверить вызов в 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 является действительным и может быть создан, но эти условия будутв другом пакете, поэтому я хочу отделить отношения в моем тесте.

Есть ли способ создать какой-нибудь фиктивный класс для использования здесь? Я думал, издевательство, но не уверен, как я могу использовать это в этом случае

...