跳转到主要内容
gokookie 提交于 9 June 2012

原文链接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中不存在这个方法。