测试phpUnit路径时出错:ErrorException:尝试获取非对象的属性

时间:2016-05-31 17:31:56

标签: php laravel phpunit

我是一名新手开发人员,我正在尝试设置phpUnit并在现有应用程序中设置一个我没有开发的基本测试套件。我正在浏览laravel文档并尝试运行一些基本测试。当我尝试运行以下内容时:

$response = $this->action('GET', 'AlertsController@bannerAlerts');

我得到以下异常:

AlertsControllerTest::testIndexRoute
ErrorException: Trying to get property of non-object

我打电话的方法是:

public function count() {
    $statusIds = DB::table('alert_status')->where('user_id', $this->crmUser->id)->where('is_new', 0)->lists('alert_id');
    $count = DB::table('alerts')->WhereNotIn('id', $statusIds)->count();
    return Response::json($count);
}

有谁知道我为什么会收到这个错误?据我所知,我并不是想要获得任何属性。我只想打电话给路线。

抛出错误的测试方法是:

   public function testIndexRoute() { 
       $this->crmUser = new stdClass();  
       $this->crmUser->id = new stdClass(); 
       $this->crmUser->id = 1; 
       $response = $this->action('GET','AlertsController@bannerAlerts');           
       $count = $response->original; $this->assertResponseOk(); 
    } 

1 个答案:

答案 0 :(得分:1)

由于帖子中的信息非常有限,我猜测问题是$this->crmUser->id。在使用count方法调用数据库之前,请尝试var_dump crmUser

我猜你的单元测试没有为正在测试的count()方法属于的类的实例设置crmUser。

public function count() {
      var_dump($this->crmUser);
      $statusIds = DB::table('alert_status')->where('user_id', $this->crmUser->id)->where('is_new', 0)->lists('alert_id');
      $count = DB::table('alerts')->WhereNotIn('id', $statusIds)->count();
      return Response::json($count);
 }

如果您发布了phpunit测试方法的文本,那将会有很大帮助。