我正在try 在symfony 6中对联系人表单上的一些潜在行为进行单元测试,并专门测试由表单域上的约束返回的消息.

为此,我try 在分析器中获取这些消息,但我找不到任何方法来检索返回的错误消息,我只找到如何获取错误数:

 public function testFailureEmailSending()
{
    // Given
    $this->client->enableProfiler();

    // When
    $this->client->request('POST', '/contact', [
        'contact' => [
            'name' => '',
            'email' => '',
            'phone' => '',
            'message' => 'Less than 30 characters !',
        ]]);

    if ($profile = $this->client->getProfile()) {
        $validator = $profile->getCollector('validator');
        $violationsCount = $validator->getViolationsCount();
        // how to retrieve error messages ?
    }

    // Then
    $this->assertEquals(4, $violationsCount); // works
}

推荐答案

要通过分析器找到违反约束的情况有点困难.您可能只想为验证编写适当的单元测试,而不需要整个请求-控制器-开销.Symfony提供了一个ValidatorBuilder,您可以很容易地在单元测试中使用:

public function testFailureEmailSending(): void
{
    $validator = Validation::createValidationBuilder()
        ->enableAnnotationMapping()
        ->getValidator();

    $violations = $validator->validate($contact);

    // Perform assertions
}

也就是说,收集器提供从验证器返回收集的数据的方法getCalls().DataCollector使用的TraceableValidator将在每次调用验证时添加收集的数据,如您在TraceableValidator.php#L97-getCalls()中所见.

换句话说,您应该能够通过执行以下操作来检索违规:

// Be careful, this is not the actual array, but a Data-object from the VarDumper component, but it provides array access
$collectedData = $profile->getCollector('validator')->getCalls();
// You might need to call iterator_to_array() first for the next line to work
$violations = end($collectedData)['violations'];

Php相关问答推荐

具有重叠捕获组的PHP正则表达式

将变体设置字段添加到WooCommerce中的特定变量产品

Sylius php -如何将购物车传递到小枝模板(Sylius模板事件)

Codeigniter 3中SMTP.office 365.com的截断问题

针对给定产品类别的WooCommerce计数审核

Select 本地提货时隐藏WooCommerce显示的发货成本

从WooCommerce订单项目获取Dokan卖家详细信息

为什么PHP PDO忽略NOT NULL约束?

以编程方式同步 WPML 翻译更改 Woocommerce 产品销售价格

将自定义字段添加到管理产品 在 WooCommerce 3.2+ 中批量编辑

显示自定义 Laravel 9 公共属性的错误

在 WooCommerce 更新结帐事件上动态更新自定义内容

在具有Angular 的 Laravel 应用程序中,不显示图像

用户注册表单中的 HTTP 错误 405

WooCommerce:如果订单总数为零,则隐藏本地取货运输选项

Docker-用于部署的 PHP 应用程序映像无法在本地运行

为WooCommerce中的运输方式ID设置必填的 checkout 订单备注字段

.htaccess环境变量条件不被判断

按数字然后按字符串对关联 PHP 数组进行排序

使用 v-for 的存储链接中的 Img src 在 Laravel vuejs 中不起作用