【问题标题】:How to test an ajax call using phpunit test cases?如何使用 phpunit 测试用例测试 ajax 调用?
【发布时间】:2011-03-02 06:00:02
【问题描述】:

如何使用 phpunit 测试用例测试 ajax 调用?

【问题讨论】:

  • 我不确定你可以。 Ajax 是从客户端完成的,PHP 在服务器上。

标签: php ajax unit-testing automated-tests


【解决方案1】:

根据您的 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 测试来执行此操作。

【讨论】:

  • 这很好用!但是,如果您在单个单元测试会话中运行多个测试,即使使用 setUp/tearDown,您可能必须将任何 functionclass 定义拉出到单独的 PHP 文件中,您可以使用 @987654327 重新包含该文件@。还要留意globals 的使用方式;如果您正在使用将include() 放置在函数中的单元测试框架。在这种情况下,globals 的使用会变得很棘手,因此请避免使用它们。
猜你喜欢
  • 2014-07-21
  • 1970-01-01
  • 2010-12-25
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
相关资源
最近更新 更多