Symfony Mink 功能测试指南

在寻找使用Mink进行Symfony项目功能测试的示例代码时,发现网络上缺乏最新的或合适的文章。因此,撰写了这篇文章,以帮助那些处于相同困境的人。

AJAX 功能需求

目标是利用选择下拉列表时的onchange DOM事件,然后将选定的项目作为参数发送AJAX调用,最后从AJAX调用获取文本响应以设置一个span元素的文本。在Symfony中进行AJAX调用的最简单方式是使用jQuery的ajax方法。

Twig HTML代码

在Twig模板中,有一个如下的下拉“select”列表:

<select id="ajax"> <option value="Flower">Flower</option> <option value="Car">Car</option> <option value="City">City</option> <option value="Country">Country</option> </select>

然后,将使用jQuery代码:$('select#ajax').val()来获取列表中选定的值。

还有一个段落标签在一个div标签内:

<div> You selected: <span id="txtHint">Rose</span> </div>

在其中将使用jQuery代码:$('#txtHint').text(response);来设置文本。

Symfony控制器

在Symfony控制器代码中,使用路由注解,因为觉得它更容易管理。所以该页面的路由是“insecure”。以下是代码:

/* * * @Route("/insecure", name="insecure") */ public function insecureAction(Request $request){ return $this->render('security/insecure.html.twig'); }

这会简单地渲染Twig文件中的代码“insecure.html.twig”,在这种情况下,任何匿名用户都可以访问。

AJAX路由代码稍微复杂一些,尽管仍然相对简单。不使用任何参数,只是简单地从URL中获取查询字符串。以下是代码:

/* * * @Route("/ajax", name="ajax") */ public function ajaxAction(Request $request) { $value = "default"; $selected = $request->query->get('item'); if ($request->isXmlHttpRequest()) { switch($selected){ case "Flower": $value = "Rose"; break; case "Car": $value = "BMW"; break; case "City": $value = "Taft"; break; case "Country": $value = "USA"; break; } } return new Response($value); }

注意,如果路由收到非XMLHTTPRequest(XHR)请求,会返回一个默认值。使用if语句来检查请求是否确实是XHR请求,然后根据传入的项目进行切换。返回值基于在下拉列表中选定的内容。

通常,使用Symfony调试URL进行所有开发测试,这意味着只需将“app_dev.php”附加到URL。在测试代码中,主机名为“mink_test”。所以调试URL将是:

http://mink_test/app_dev.php/insecure

当在浏览器中输入此URL,然后从下拉列表中选择某个项目时,它将如下所示:

(此处应有截图)

在上面的截图中,调试URL显示了最后一个AJAX请求,带有特殊的AJAX图标。它还显示了实际使用的AJAX URL,在上面的案例中是http://mink_test/ajax?item=Car;所以查询字符串是?item=Car,请求返回字符串值“BMW”,并且注意到id为“txtHint”的span被设置为“BMW”。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485