验收测试 - Ajax

  • 作者:KK

  • 发表日期:2016.1.6


之前跟大家演示的都只是些页面URL、元素和文本的断言,但是如果要异步获取一个数据列表的数据时,我们通常就要往一个地址获取json数据回来再用js把数据渲染到列表里,好了我们如何测试这个异步获取数据列表的接口输出的数据是否正常呢?

由于它输出的数据是json,假设它的地址是datalist.php,那么我们也不能这样实现断言

$I->amOnPage('/datalist.php');
$I->see('你一定很头疼这里写什么');
$I->seeElement('就一串JSON字符串,哪有什么Html Element?');

来,正题,问题就在上面,解决办法在此

$param = [
	'page' => 2,	//假设我们要第2页的数据
	'type' => 3,	//假设数据有类型~
];	//这个$param是要异步请求时提交上去的参数
$I->sendAjaxRequest('get', '/datalist.php', $param);	//这样其实就相当于 /datalist.php?page=2&type=3
$I->seeResponseCodeIs(200);	//断言请求后,服务端响应回来的报文状态码应该是200

$browser = \Codeception\SuiteManager::$modules['PhpBrowser']; //这样来取出一个模块
$jsonString = $browser->client->getInternalResponse()->getContent()->__toString(); //通过模块获取响应正文,就是那串json,但必须转成string(注意我代码后面有toString的调用),否则你会得到一个对象,这框架抽象得挺厉害,连个响应报文内容都是对象

$jsonArray = json_decode($jsonString, true);
\PHPUnit_Framework_Assert::assertInternalType('array', $jsonArray);	//断言解码后的类型
\PHPUnit_Framework_Assert::assertEquals(20, count($jsonArray));	//断言数据个数

这是一个断言ajax请求的例子,其实这里用到的几个方法也没写到前面的断言大全里,因为我想你慢慢深入,不要一下子迎来太多东西.但其实经验丰富的人士就算不看英文文档,光看AcceptanceTester这个类的方法就已经知道有这些东西了

好了我下一节继续补充一下断言