【问题标题】:Symfony functional test - assertion for a tableSymfony 功能测试 - 表的断言
【发布时间】:2015-10-29 04:13:07
【问题描述】:

我只想对下面的 HTML 数据运行一些断言。在$this->assertEquals(1, ..., "failure"); 里面我试过了:

$crawler->filter('table.table-general > tr > td:contains("<strong>Task ID</strong> 6")')
$crawler->filter('table.table-general > tr > td:contains("<strong>Customer</strong> ABC Inc.")')
$crawler->filter('table.table-general > tr > td:contains("<strong>Location</strong> New York City")')
$crawler->filter('table.table-general > tr > td:contains("<strong>Phone Number</strong> 555-1234")')

但不幸的是它不起作用(断言失败)。我做错了什么?

<table class="table table-curved table-general">
    <tr>
            <td rowspan="5" width="10%" id="general-task-id"><strong>Task ID</strong><br /><h3>6</h3></td>
            <td width="30%"><strong>Customer</strong> ABC Inc.</td>
            <td width="30%"><strong>Location</strong> New York City</td>
            <td width="30%"><strong>Phone Number</strong> 555-1234</td>
    </tr>

    ...

【问题讨论】:

    标签: php symfony phpunit functional-testing


    【解决方案1】:

    您的第一个断言查找 &lt;strong&gt;Task ID&lt;/strong&gt; 6,但实际上您的 HTML 显示的是 &lt;strong&gt;Task ID&lt;/strong&gt;&lt;br /&gt;&lt;h3&gt;6&lt;/h3&gt;

    【讨论】:

    • 通常,单元测试在第一次失败后停止执行。更正您的测试并再次执行它以查看其余部分是否有效。
    • 不走运。不幸的是,这并没有解决它:(
    【解决方案2】:

    filter 方法使用 CssSelector 和 contains 基于节点进行 xpath 选择,因此无法检查内部的其他 html 标记。 这是您示例的有效解决方案:

    $i = $crawler->filter('table.table-general > tr > td > strong:contains("Task ID")')->count();
    $this->assertEquals(1, $i);
    
    $i = $crawler->filter('table.table-general > tr > td > h3:contains("6")')->count();
    $this->assertEquals(1, $i);
    
        $i = $crawler->filter('table.table-general > tr > td > strong:contains("Customer")')->count();
        $this->assertEquals(1, $i);
    
        $i = $crawler->filter('table.table-general > tr > td:contains("ABC Inc.")')->count();
        $this->assertEquals(1, $i);
    

    希望有帮助

    【讨论】:

    • 奇怪的是最终修复它的是contains("Location New York City") - 它似乎忽略了html标签。
    • 嗨@b85411 正是我的意思,你试过我的代码吗?它会解决你的问题吗?
    • 查看您的代码,即使数据不正确,测试也可能通过。例如,假设呈现的页面&lt;strong&gt;Task ID&lt;/strong&gt; ABC Inc. - 以您的示例为例,这仍然会通过,因为任务 ID 和 ABC Inc. 都被发现,即使它们不应该在同一个 &lt;td&gt; 中?
    • @b85411 您的测试似乎与 html 过于耦合...如果您的设计师重新设计您的网站,您会怎么做?你必须重写所有的功能测试吗?看看best practice
    • 但是如果设计师在重新设计时出错并将客户数据放在任务 ID 旁边怎么办?用我的方法,这个错误会被捡起:)
    猜你喜欢
    • 2023-04-02
    • 2021-02-06
    • 1970-01-01
    • 2019-01-12
    • 2022-01-06
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多