我是一名新手开发人员,我正在尝试设置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();
}
答案 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测试方法的文本,那将会有很大帮助。