Я не знаю, как проверить конструктор запросов создания - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь протестировать весь метод репозитория, но я не знаю, как сделать тест, я хочу использовать Profecy.Я использую DoctrineMongoDBBundle .

Entity

class UsuarioEntidade{
/**
 * @MongoDB\Id
 */
protected $usuId;

/**
 * @MongoDB\Field(type="string", name="usua_nome")
 */
protected $usuNome;

/**
 * @MongoDB\Field(type="string", name="usua_telefone")
 */
protected $usuTelefone;

/**
 * @MongoDB\Field(type="string", name="usua_email")
 */
protected $usuEmail;

/**
 * @MongoDB\Field(type="string", name="usua_imagem_perfil")
 */
protected $usuImagemPerfil;

/**
 * @MongoDB\Field(type="date")
 */
protected $createdAt;

##get and set

Репозиторий

class UsuarioRepositorio
{
protected $dm;

public function __construct(DocumentManager $documentManager)
{
    $this->dm = $documentManager;
}
public function all(array $input = null)
{
    $usuario = UsuarioEntidade::class;

    $all = $this->dm->createQueryBuilder($usuario);     

    return $all->getQuery();
}

Это тест, который я не знаю, как выполнитьоснованный на классе репозитория.

class UsuarioRepositorioTest extends TestCase
{

protected $repositorio;

protected $documento;

public function setUp()
{
    $this->documento = $this->prophesize(DocumentManager::class);

    $this->repositorio = new UsuarioRepositorio($this->documento->reveal());
}
public function testObtendoTodosOsDados()
{
    $output = $this->usuario();
    $this->documento->createQueryBuilder(UsuarioEntidade::class)->willReturn($output)->shouldBeCalled();

    $all = $this->repositorio->all();

    $this->assertEquals($output, $all);
}

protected function usuario()
    {
        $usuarioEntidade = new UsuarioEntidade();
        $usuarioEntidade->setUsuNome('Humanos');
        $usuarioEntidade->setUsuTelefone('89855236554');
        $usuarioEntidade->setUsuEmail('mano@email.com');
        $usuarioEntidade->setUsuImagemPerfil('/application/sam/tests/Usuario/ImagemPerfil/sam.png');

        $data = new \DateTime();
        $usuarioEntidade->setCreatedAt($data->format('Y-m-d'));

        return $usuarioEntidade;
    }

Я не знаю, как издеваться над методом "getQuery ()".Эта ошибка возникает всегда: Ошибка: вызов функции-члена getQuery () для массива

1 Ответ

0 голосов
/ 25 сентября 2018

Проблема в коде состоит в том, что ваше ожидание createQUeryBuilder() возвращает массив, и вы пытаетесь вызвать функцию для этого массива.

Вы должны смоделировать объект QueryBuilder и настроить ожиданиедля его функции getQuery(), чтобы вернуть желаемый результат.Макет QueryBuilder должен быть возвращен при настройке ожидания для функции DocumentManager createQueryBuilder().

Примерно так:

public function testObtendoTodosOsDados()
{
    $output = $this->usuario();

    $mockQueryBuilder = $this->prophesize(QueryBuilder::class); // Remember to import the proper QueryBuilder namespace

    $mockQueryBuilder->getQuery()->willReturn($output)->shouldBeCalled();

    $this->documento->createQueryBuilder(UsuarioEntidade::class)->willReturn($mockQueryBuilder)->shouldBeCalled();

    $all = $this->repositorio->all();

    $this->assertEquals($output, $all);
}
...