【发布时间】:2011-03-02 06:00:02
【问题描述】:
如何使用 phpunit 测试用例测试 ajax 调用?
【问题讨论】:
-
我不确定你可以。 Ajax 是从客户端完成的,PHP 在服务器上。
标签: php ajax unit-testing automated-tests
如何使用 phpunit 测试用例测试 ajax 调用?
【问题讨论】:
标签: php ajax unit-testing automated-tests
根据您的 ajax 响应是如何生成的,这可能是容易的,也可能是困难的。如果您使用控制器来生成响应,您可以简单地在单元测试中调用相应的函数并检查返回的 HTML/XML。例如,如果响应是通过调用控制器对象上的函数生成的,如下所示:
$htmlResponse = $controller->buildPage($_REQUEST);
然后您可以像这样对响应进行单元测试:
$expected = "<html>whatever html you expect</html>";
$test_request = array(...); // parameters to test
$actual = $controller->buildPage($test_request);
$this->assertEquals($expected, $actual);
如果您的响应不是通过这样的函数调用生成的 - 如果您的 AJAX 请求是针对其中包含一些动态内容的实际页面,那么您似乎可以执行以下操作:
$_POST['parameter1'] = "test value"; // stuff whichever request object you're using
// with the values you need
ob_start();
include('ajax_page.php');
$actual = ob_get_clean();
$expected = "<html>expected html as above</html>";
$this->assertEquals($expected, $actual);
PHPUnit 还提供assertTag 断言,用于测试生成的 HTML 和 XML 是否包含您期望的标签 - 它可能有点挑剔,但它比仅仅回显响应并与字符串进行比较更健壮。
最终,您只想知道,在给定特定输入(请求参数)的情况下,您会得到期望的输出(返回的 HTML 或 XML)。它是一个 AJAX 调用这一事实并没有从根本上改变这个等式。如果您想测试 AJAX 请求是否正确生成,您需要在客户端使用 JS 测试来执行此操作。
【讨论】:
function 和 class 定义拉出到单独的 PHP 文件中,您可以使用 @987654327 重新包含该文件@。还要留意globals 的使用方式;如果您正在使用将include() 放置在函数中的单元测试框架。在这种情况下,globals 的使用会变得很棘手,因此请避免使用它们。