Symfony 4.2 将在 2018 年11月发布。本文是系列第一篇,展示该版 Symfony 所引入的重要新功能。


Contributed by
Viktor Novikov
in #27807.

在 Symfony 程序中,functional tests(功能测试)使用的是 BrowserKit 组件 所提供的基于 PHP 的客户端,来模拟浏览器并操作 HTTP 请求。在 Symfony 4.2 中我们在这个客户端中引入了一个全新的 helper methods,以简化链接点击和表单提交等动作。

首先是 clickLink() helper,点击的是包含了给定文本的第一个链接(或者点击 alt 属性包含有指定文本的第一张图片):

1
2
3
4
5
6
7
8
// Before / 之前
$client->request('GET', '/');
$link = $crawler->selectLink('Login')->link();
$crawler = $client->click($link);
 
// After / 之后
$client->request('GET', '/');
$crawler = $client->clickLink('Login');

之前处理链接的方式 (使用 selectLink()click() 方法) 仍然有效,你可以在更复杂的场景中使用它 (例如你需要在点击链接之前先访问到它的某些属性)。

另一个新的 helper 叫做 submitForm(),它可以找到包含给定文本(或 id, value 乃至 name)的按钮所属的表单,并用这个表单来提交给定的字段值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Before / 之前
$client->request('GET', '/register');
$form = $crawler->selectButton('Sign Up')->form();
$crawler = $client->submit($form, [
    'name' => 'Jane Doe',
    'username' => 'jane',
    'password' => 'my safe password',
]);
 
// After / 之后
$client->request('GET', '/register');
$crawler = $client->submitForm('Sign Up', [
    'name' => 'Jane Doe',
    'username' => 'jane',
    'password' => 'my safe password',
]);

以前处理表单的方式 (使用 selectButton()submit() 方法) 仍然有效,你可以在更复杂的场景中使用它 (例如你需要在表单提前之交,访问它的一些属性)。

最后,如果你希望在一个真实浏览器中运行你的功能测试而不是此处的模拟浏览器,参考 Symfony Panther,这是 Symfony 生态的最新成员。它最牛的一点就是使用和 BrowserKit 相同的API,因此你也可以在 Panther 中使用这些方法。