以超级用户身份在Drupal 6 SimpleTest中登录

有时,使用SimpleTest的最复杂的部分是在开始测试之前确保一切正常。这意味着需要预先设置正确的模块并创建正确的内容类型。因为SimpleTest通过向页面发出CURL请求来工作,所以完成某些任务的最可靠方法是像平常一样使用管理表单。以一个示例为例,如果要启用模块中的块,则应提交块表单,然后将所需的块添加到各个不同的区域,例如。

// 启用不同的块

$blocks = array(

    'my_awesome_block' => 'header'

);

 

$this->drupalPost('admin/build/block', $blocks, 'Save blocks');

但是,如果您没有为当前用户授予“管理阻止”访问权限,或者忘记了登录权限,那么当您尝试执行此操作时,将会收到拒绝访问错误。

当只考虑一种形式时,这很好。当测试依赖于许多其他系统元素的复杂模块时,就会出现问题。添加大量权限在很大程度上是不必要的,并且可能与您要测试的内容无关。最好的解决方案是以Drupal超级用户身份登录并绕过所有设置权限问题。这看起来似乎很简单,但是当SimpleTest安装Drupal时(就像在每个测试开始时所做的那样),它将为超级用户创建一个占位符,而不激活它。因此,要以超级用户身份登录,您需要激活该用户并重新加载他们,以便您可以使用该帐户登录。

SimpleTest方法drupalLogin()用于将用户登录到系统,这将用户对象作为单个参数。您还需要向用户对象添加一个名为“ pass_raw”的属性,然后再尝试使用该属性登录。这是原始文本格式的密码,SimpleTest将在登录表单上使用该密码。

要以超级用户身份登录,请使用以下代码。

public function setUp() {

    // 启用测试所需的任何模块。

    parent::setUp('views', 'views_ui', 'views_export', 'profile', 'taxonomy');

 

    // 更新主用户,以便我们使用它,设置用户名和密码字段

    db_query("UPDATE {users} SET name = 'master', pass = MD5('wibble'), status = 1 WHERE uid = 1");

 

    // 加载主用户

    $admin_user = user_load(1);

 

    // 给它一个pass_raw值,以便SimpleTest可以使用它登录

    $admin_user->pass_raw = 'wibble';

 

    // 登录

    $this->drupalLogin($admin_user);

 

    // 在这里执行一些复杂的任务...

}

如果您要导入视图,则此步骤尤为重要,因为事实证明只有超级用户才能导入视图。即使您启用了所有正确的模块并为创建的用户提供了所有正确的权限,如果您尝试访问导入视图页面,您仍然会收到拒绝访问的消息。

在开始测试之前,注销超级用户帐户可能是一个好主意。可以通过drupalLogout()以下方法使用该方法来完成此操作。

$this->drupalLogout();

以上是 以超级用户身份在Drupal 6 SimpleTest中登录 的全部内容, 来源链接: utcz.com/z/349174.html

回到顶部