PHP单元,使用单元测试测试laravel日志消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP单元,使用单元测试测试laravel日志消息相关的知识,希望对你有一定的参考价值。

我正在使用phpUnit为存储数据的存储函数创建单元测试。

目前,我有一个测试验证它已存储数据。

但是,我还想创建一个测试,证明如果模型保存功能失败,则会生成laravel日志消息。

下面的代码显示了商店功能。 “log :: info”是我要测试的行。

谢谢。

public function store(Venue $venue){ 
    $saved =  $venue->save();
    if($saved == false){
        Log::info('Failed to Save Venue'. $venue);
    }
 }

这是我到目前为止,我传递一个空模型,由于数据库约束将导致保存失败

public function test_venue_store_failed(){
   $venue = new Venue();
   $venueRepo = new VenueRepository();
   $this->withExceptionHandling();
   $venueRepo->store($venue);
}
答案

也许你可以在Models上使用事件监听器。使用此功能,您可以获取创建或其他事件的日志。查看下面的示例。希望能有所帮助。

信息1。

<?php
    namespace App;
    use IlluminateDatabaseEloquentModel;
    use User;
    class Venue extends Model
    {
        protected $fillable = ['title', 'ect..'];
        public static function boot() {
            parent::boot();
            static::created(function($item) {
                Log::info('venue.created');
            });
            static::updated(function($item) {
                Log::info('venue.created');
            });
            static::deleted(function($item) {
                Log::info('venue.created');
            });

        }

    }

信息2。

模型上还有一个存在方法

if ($venue->exists()) {
    // saved 
} else {
    // not saved
}

信息3

要在$venue->save();错误时获取插入查询,可以尝试捕获这样的异常:

    try{
       $venue = new Venue;
       $venue->fields = 'example';
       $venue->save(); // returns false
    }
    catch(Exception $e){
       // do task when error
       Log::info($e->getMessage());   // insert query
    }

希望这可以帮助 :)

另一答案

您可以按照以下方式在单元测试中模拟Log facade,如the docs:所示

public function test_venue_store_failed(){
    $venue = new Venue();

    Log::shouldReceive('info')
        ->with('Failed to Save Venue'. $venue);

    $venueRepo = new VenueRepository();
    $this->withExceptionHandling();
    $venueRepo->store($venue);
}

以上是关于PHP单元,使用单元测试测试laravel日志消息的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 .NET Core 的单元测试中查看生成的日志消息?

运行单元测试时如何抑制来自 node.js 应用程序的应用程序日志消息?

Laravel 5.5 中 PHP 单元测试中的类验证器错误

PHP单元测试框架PHPUnit的使用

在Laravel PHP单元测试中,Regex的Range值失败

Laravel 单元测试断言函数总是失败