Array () не соответствует ожидаемому типу "объект" - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь написать тестовый код для функции в хранилище. Мой код репо:

 public function getcomment($id){

    $data = ProductComment::active()
        ->where('productId',$id)
        ->orderBy('date','desc')
        ->simplePaginate(5)->items();
    return $data;
}

для этого я написал этот тестовый код;

 public function testgetcomment(){
    /*$Mock = \Mockery::mock(Product::class);
    $Mock->shouldReceive('getId')
        ->once()
        ->andReturn(true);
    $this->repo->getcomment($Mock->getId());
    $this->assertTrue(true);*/

    $ecpected=ProductComment::where('productId',1)->get(); 

    $actual=$this->repo->getcomment(1); 

    self::assertEquals($expected,$actual);}

Я получаю этоошибка;

Массив () не соответствует ожидаемому типу "объект".Вы можете мне помочь?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

1. Проверьте имена переменных ($ecpected содержит данные, которые вы извлекаете из модели, а $expected - это то, что вы пытаетесь сравнить).

$ecpected=ProductComment::where('productId',1)->get(); 
$actual=$this->repo->getcomment(1); 
self::assertEquals($expected,$actual);   

2.Вы можете проверить дампыдля сравнения обеих переменных (чтобы быть уверенным, что вы получаете разные типы (ваше хранилище возвращает массив, а запрос ProductComment возвращает вам объект / коллекцию.).

dump($expected);
dump($actual);

3. Возможно, вам нужно использоватьtoArray() метод для вашей переменной $expected для достижения вашей цели.

0 голосов
/ 07 декабря 2018

Функция items() объекта пагинации возвращает массив объектов.Однако функция get() в запросах Eloquent возвращает коллекцию объектов.

Чтобы исправить ваш тест, верните базовый массив из коллекции.

$ecpected = ProductComment::where('productId',1)->get()->toArray(); 
$actual = $this->repo->getcomment(1); 
self::assertEquals($expected,$actual);
...