Array()与预期类型“对象”不匹配

时间:2018-12-07 11:06:41

标签: php laravel phpunit phpunit-testing

我正在尝试为存储库中的功能编写测试代码。我的回购代码是;

 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);}

我收到此错误;

Array()与预期的类型“对象”不匹配。你能帮我吗?

2 个答案:

答案 0 :(得分:2)

分页对象上的items()函数返回对象数组。但是,口才查询中的get()函数返回collection个对象。

要修复测试,请从集合中返回基础数组。

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

答案 1 :(得分:0)

1。检查变量名(#!/bin/bash mystring="5e51584a4c" for (( i = 0; i < ${#mystring}; i += 2)); do snumber="${mystring:i:2}" echo "number as string=${snumber}" echo "number=$((16#${snumber}))" done 包含您要从模型中提取的数据,$ecpected是您要比较的数据)。

$expected

2。您可以比较检查两个变量的转储(以确保获得不同的类型(您的存储库返回数组,而查询ProductComment则返回对象/集合)。

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

3。您可能需要在dump($expected); dump($actual); 变量上使用toArray()方法才能实现目标。