【问题标题】:PhpSpec test if log written with same dataPhpSpec 测试是否使用相同数据写入日志
【发布时间】:2021-04-05 21:35:17
【问题描述】:

我需要测试我的应用程序日志是否写入了正确的数据(我知道在大多数情况下检查日志并不是很重要,但在这种特定情况下却非常重要)。

所以日志看起来像这样:

 $this->logger->error(
       'Invalid survey provided',
        [
            'exception' => $e,
            'survey' => $survey
        ]
 );

在规范中我有一个代码:

        $exception =  new ValidationException(
            sprintf(
                'Provided survey "%s" does not have all required fields %s',
                json_encode($surveysResponse['result'][0]),
                json_encode(Survey::$requiredFields)
            )
        );
        $logger->error(
            'Invalid survey provided',
            [
                'exception' => $exception,
                'survey' => $surveysResponse['result'][0]
            ]
        )->shouldBeCalled();

并且规范失败的 b-z 模拟不匹配,但我确信实际上记录了具有相同调查的相同错误消息和具有相同错误消息的异常。我无法告诉您确切的问题,因为错误输出很大且经过修剪。但我 90% 确定在比较异常对象时它会失败,因为异常不是完全相同的对象。

【问题讨论】:

  • -vvv 运行它并显示失败的期望。谢谢。

标签: php unit-testing phpspec


【解决方案1】:

这可能是错误的方法,因为由于日志条目上的时间戳不同,日志条目不会相同。只是preg_match() 日志文件,跨越多行,显然带有通配符时间戳。然后应该保存假设它们是“相同的”,当返回的匹配数等于两个时(假设一个截断的日志文件开始)。结合上述条件查看\PHPSpec\Matcher.beTrue()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多