原文链接http://drupal.org/node/265762。
内部浏览器
DrupalWebTestCase设有一个内部浏览器,用作测试网站上的浏览。更多信息请阅读有关WebTestCase类的基础文档。
function $this->drupalGet($path, $options = array())
该函数向Drupal页面提出GET请求。 其中,$PATH指要访问的页面的路径,$options给出可能需要提供给要访问页面路径的url()函数的其他一些数据。加载后的内容,会存储到$this->_content 中(和返回一样),可通过this->drupalGetContent()函数来获取内容
请参加API文档来了解更多的url()函数(http://api.drupal.org/api/function/url)中如何构造$option关联数组的信息。
function $this->drupalPost($path, $edit, $submit, array $options = array(), array $headers = array())
该函数向Drupal页面提出post请求。
- $path表示页面中含有的表单,显示$edit中的数据;
- $option值传递给url(),以便建立$path的路径;
- $sumbit用于发送按钮的点击(submit显示标题有该方法解释传递)
- 表示HTTP表头的$head为POST操作的可选参数;
- $edit数据应该是一组数组,其中索引值为HTML表单元素的"名字"属性值。可以通过像firebug这样的插件来获得该值。
该函数也判断请求是否成功,表单字段从而可以设置。
举例说明:
<?php
$name = $this->randomName();
$mail = "$name@example.com";
$edit = array(
'name' => $name,
'mail' => $mail,
'status' => FALSE, // checkboxes must be set with TRUE/FALSE rather than 1/0
);
$this->drupalPost('user/register', $edit, 'Create new account');
?>
注意:这里调用的是是drupalPostRequest()。
对于多步骤表单,可以通过赋$path以$NULL值,从而使连续post表单成为可能。
function $this->clickLink($label, $index = 0)
该函数给出当前页面名字的链接。链接路径有第一个默认链接文本,或者后面的$index给出。
举例如下:
<?php
$this->clickLink(t('Log out'));
?>
function $this->drupalCreateUser($permissions = NULL)
该函数创建用户,并返回含有pass_raw值的用户对象,该pass_raw参数含non-hashed密码。
该函数通过给返回用户对象定义$permissions来创建权限。
$permissions为一组字符串数组。如果忽略还参数或者赋值NULL,那么注册用户权限则使用默认权限,
array('access comments', 'access content', 'post comments', 'post comments without approval')
结果会对成功做判断,同时清理用户和权限表。
function $this->drupalLogin($user = NULL)
该函数产生用户登陆网页后日志。只需对$user参数操作(需要给出pass_raw值)。
如果忽略参数,则用上述提到的默认权限来产生用户和其权限。
用户登陆后,就看用内置浏览器来浏览了。
举例如下:
<?php
// Prepare a user to do the stuff
$user = $this->drupalCreateUser(array('access content', 'create page content'));
$this->drupalLogin($user);
// Now do something with the users
$this->drupalGet('node/' . $node->nid));
?>
上述例子也对登陆过程做了几个判断。
function $this->drupalLogout()
该函数执行退出当前登陆。因为该函数通过$this->drupalLogin($user = NULL)自动调用的,所以要切换到另一个用户时,是不需要调用这个函数的。除非想退出当前登陆,切换到匿名登陆是才需要调用它。
举例如下:
<?php
// Prepare a Drupal user to retrieve a page
$user = $this->drupalCreateUser(array('access content', 'create page content'));
$this->drupalLogin($user);
$test_page = 'node/' . $node->nid;
// Retrieve page as the logged in user
$this->drupalGet($test_page);
$this->assertText(t('Welcome'), t('Check that a welcome message is set'));
// Logout and retrieve the page as an anonymous user
$this->drupalLogout();
$this->drupalGet($test_page);
$this->assertText(t('Please login'), t('Check that user is prompted to login'));
?>
注意:上例中需要退出,因为浏览器上已经有登陆会话了。如果你没有登陆一直以匿名用户在浏览网页,当然不需要退出。
function $this->_drupalCreateRole($permissions = NULL)
该函数很少用。$permission参数用法和drupalCreateUser一样。
返回值是整型role-id,或者失败时以FALSE返回。
function $this->randomString($number = 8)
该函数返回$number参数唯一前缀字符串。该字符串为32到126之间的ASCII字符串。第一位字符不能为数字。
function $this->randomName($number = 8)
返回$number的唯一前缀字母字符串,第一个字母不能为数字。
function $this->drupalCreateContentType($settings)
该函数产生基于默认配置的自定义内容类型。节点的默认值已经设好,可以选择覆盖它们(或者通过$settings关联数字添加新的数值)。
举例如下:
<?php
$settings = array(
'type' => 'my_special_node_type', // Override default type (a random name)
'title_label' => 'Name', // Override default title label ("Title")
'body_label' => 'Description', // Override default body label ("Body")
);
$content_type = $this->drupalCreateContentType($settings);
$this->assertEqual($content_type->type, 'my_special_node_type'); // We set this.
?>
function $this->drupalCreateNode($settings)
该函数产生一个节点。节点的默认值已经设置好,可以选择覆盖它们(或者通过$settings关联数字添加新的数值)。
举例如下:
<?php
$settings = array(
'type' => 'my_special_node_type', // This replaces the default type
'my_special_field' => 'glark', // This appends a new field.
);
$node = $this->drupalCreateNode($settings);
$this->assertEqual($node->type, 'my_special_node_type'); // We set this.
$this->assertEqual($node->comment, 2); // This is default.
?>
默认设置如下所示:
<?php
// Populate defaults array
$defaults = array(
'body' => $this->randomName(32),
'title' => $this->randomName(8),
'comment' => 2,
'changed' => time(),
'format' => FILTER_FORMAT_DEFAULT,
'moderate' => 0,
'promote' => 0,
'revision' => 1,
'log' => '',
'status' => 1,
'sticky' => 0,
'type' => 'page',
'revisions' => NULL,
'taxonomy' => NULL,
);
$defaults['teaser'] = $defaults['body'];
// If we already have a node, we use the original node's created time, and this
if (isset($defaults['created'])) {
$defaults['date'] = format_date($defaults['created'], 'custom', 'Y-m-d H:i:s O');
}
if (empty($settings['uid'])) {
global $user;
$defaults['uid'] = $user->uid;
}
?>
function $this->cronRun()
该函数实现SimpleTest中Drupal安装的cron功能。千万不要直接调用drupal_run_cron。在Simple Test6.x中不存在这个方法。