【问题标题】:Codeception doesn't provide exception information when tests fail测试失败时,Codeception 不提供异常信息
【发布时间】:2024-04-26 07:30:02
【问题描述】:

我将 Codeception 与 REST 和 Laravel 模块一起使用。

当我运行vendor/bin/codeception run 并且测试由于异常而失败时,除了测试失败之外,命令行中没有显示任何信息。

所以我知道某事是错的,但不知道究竟是什么错了。

更多细节:

  1. 当未满足测试预期时,错误消息会正常显示(例如,我希望结果是 JSON,但实际上是 HTML)
  2. 相反,如果出现异常,Codeception 只会返回 FAIL 并“吞下”异常详细信息。

请注意,这些异常可捕获,而不是答案中建议的致命错误,所以我不明白为什么 Codeception 无法正确显示错误消息。

要找出确切的问题,我有两个选择:

  1. 用 try-catch 块包装测试(所以我手动捕获和调试所有内容)
  2. 手动发出 HTTP 请求并查看输出

显然,这两种“解决方案”都是不可接受的。

我错过了什么吗?有解决这个问题的方法吗?

谢谢!

【问题讨论】:

    标签: rest exception laravel codeception


    【解决方案1】:

    有时测试框架无法访问这些信息,因为应用程序框架没有提供它们。致命错误可能会“异常结束”您的应用程序,不知道谁会期待一个简单的异常作为回报。

    在这些情况下我要做的就是查看日志文件:

    /var/www/myapp/app/storage/logs/laravel.log
    
    /var/log/nginx/*.log 
    

    【讨论】:

    • 嗨安东尼奥。感谢您的答复。但这是否违反了 TDD 的整体理念?如果测试没有提供有关如何使它们变为绿色的信息,我该如何在代码之前编写测试?顺便说一句,数据库异常的示例不是致命错误(我什至可以在测试中手动捕获此异常)
    • 是的,但是如果您违反了操作系统(例如内存、磁盘、文件权限、网络服务器配置...),那么您的工具将无能为力,不幸的是那些“规则”并非每次都有效。 :)