0

当 PHPUnit 9.5.11 测试失败时,我正在尝试显示自定义消息(正在测试的 URL)。在我的 Symfony 4.4 应用程序中。

课程很简单:

class BaseTestCase extends PantherTestCase

在我的测试中,我有:

$client = static::createPantherClient();
$crawler = $client->request('GET', $url);
$this->assertSelectorExists('.some-class', $url); // <- this should display the tested $url, since the second argument is supposed to be the message to show on failure

但是当测试失败时,我得到的只是:

  1. App\Tests\PropertyListingTest::testListingWithFullQueryString 与数据集 #0 ('') Facebook\WebDriver\Exception\NoSuchElementException:没有这样的元素:无法找到元素:{“方法”:“css 选择器”,“选择器”:”。 some-class"}(会话信息:headless chrome=97.0.4692.71)

这里发生了什么?如果我运行这个:

$this->assertEquals("a", "b", "!!!!TEST FAILED!!!!");

它按预期工作:

!!!!测试失败!!!!断言两个字符串相等时失败。--- 预期 +++ 实际 @@ @@ -'a' +'b'

4

2 回答 2

0

如果我明白你的意图

$client = static::createPantherClient();
$response = $client->request('GET', $url);
$crawler = $response->getContent();

现在crawler变量保存了您从url变量中获得的实际数据

如何继续测试此信息取决于您

于 2022-01-19T16:07:11.283 回答
0

这种行为对我来说实际上看起来像一个错误。

因为如果你看一下assertSelectorExists内部是做什么的(见下文)......

public static function assertSelectorExists(string $selector, string $message = ''): void
{
    $client = self::getClient();

    if ($client instanceof PantherClient) {
        $element = self::findElement($selector); // NoSuchElementException is thrown here
        self::assertNotNull($element, $message); // so the message is never used
        
        return;
    }

    self::assertNotEmpty($client->getCrawler()->filter($selector));
}

...您会注意到,findElement如果没有找到任何元素,它会返回 null。但问题是findElement在这种情况下不返回 null ,而是引发异常。

为了解决这个问题,我会像这样制作自己的 assertSelectorExists 版本:

$client = static::createPantherClient();
$crawler = $client->request('GET', $url);
$this->assertSelectorExistsSafe($client, '.some-class', $url);

protected function assertSelectorExistsSafe($client, $selector, $message)
{
    try {
        $element = $client->findElement($client->createWebDriverByFromLocator($selector));
    } catch (\Facebook\WebDriver\Exception\NoSuchElementException $e) {
        $element = null;
    }
    self::assertNotNull($element, $message);
}
于 2022-01-20T18:24:41.923 回答