无法在Codeception acceptance\u bootstrap.php中运行Auth::loginUsingId(1)

无法在Codeception acceptance\u bootstrap.php中运行Auth::loginUsingId(1),php,laravel,codeception,Php,Laravel,Codeception,我正在使用Laravel和Codeception进行验收测试。我的大多数测试都要求用户登录,因此我想将这些行为提取到acceptance文件夹中的_bootstrap.php文件中。我知道这是在测试之前在Codeception中运行安装程序的做法 我可以确认我的users表存在我正在使用Navicat查看它,并且id为1的用户存在。据我所知,Codeception已正确配置为使用此数据库。我还为验收套件提供了Laravel4和Db模块。当我尝试运行我的验收套件或任何单独的验收测试时,我收到以下错

我正在使用Laravel和Codeception进行验收测试。我的大多数测试都要求用户登录,因此我想将这些行为提取到acceptance文件夹中的_bootstrap.php文件中。我知道这是在测试之前在Codeception中运行安装程序的做法

我可以确认我的users表存在我正在使用Navicat查看它,并且id为1的用户存在。据我所知,Codeception已正确配置为使用此数据库。我还为验收套件提供了Laravel4和Db模块。当我尝试运行我的验收套件或任何单独的验收测试时,我收到以下错误

控制台:

无论任何验收证书的内容如何,我都会收到此错误。即使是一个简单的$I->amOnPage'/'或$I->comment'test'仍然会导致错误。我相信只要遇到_bootstrap.php文件中的命令,就会发生错误。不知怎么的,它可以访问我的数据库。我应该注意到,我还尝试了启用和禁用Laravel4和Db模块的填充和清理设置的各种组合,但都没有成功

这是我的acceptance/_bootstrap.php文件:

acceptance.suite.yml:


首先,您不应该将Laravel4模块用于Codeception验收测试。它仅用于功能和单元测试

要回答关于在验收测试中自动登录用户的特定问题,我将这样做:

/tests/_support/AcceptanceHelper.php

/测试/验收/示例st.php


注意:我使用小写$I而不是$I-我发现它更容易键入-因此您可能需要将代码中的所有$I更改为$I

首先,您不应该使用Laravel4模块进行Codeception验收测试。它仅用于功能和单元测试

要回答关于在验收测试中自动登录用户的特定问题,我将这样做:

/tests/_support/AcceptanceHelper.php

/测试/验收/示例st.php

注意:我使用smallcase$I而不是$I-我发现它更容易键入-因此您可能需要将代码中的所有$I更改为$I

[Illuminate\Database\QueryException]
SQLSTATE[42P01]: Undefined table: 7 ERROR:  relation "users" does not exist
LINE 1: select * from "users" where "id" = $1 limit 1
                      ^ (SQL: select * from "users" where "id" = 1 limit 1)
<?php

Auth::loginUsingId(1);
actor: Tester
paths:
    tests: tests
    log: tests/_output
    data: tests/_data
    helpers: tests/_support
settings:
    bootstrap: _bootstrap.php
    colors: true
    memory_limit: 1024M
modules:
    config:
        Db:
            dsn: 'pgsql:host=localhost;dbname=myapp'
            user: 'someuser'
            password: 'somepass'
            dump: tests/_data/dump.sql
class_name: AcceptanceTester
modules:
    enabled:
        - AcceptanceHelper
        - Laravel4
        - PhpBrowser
        - Db
    config:
        PhpBrowser:
            url: 'http://localhost'
        Laravel4:
            cleanup: false
        Db:
            populate: true
            cleanup: false
<?php
namespace Codeception\Module;
use \AcceptanceTester;

class AcceptanceHelper extends \Codeception\Module
{
    // This is my default user I use for all my tests
    public function loginUser(AcceptanceTester $i)
    {
        $this->login($i, 'user@test.com', 'tester');
    }  

    // And this function lets me login a specific user if I need someone else
    public function login(AcceptanceTester $i, $email, $password)
    {
        $i->amOnPage('/login');
        $i->fillField('email', $email);
        $i->fillField('password', $password);
        $i->click('submit');
        $i->seeCurrentUrlEquals('/dashboard');
    }

    public function logoutUser(AcceptanceTester $i)
    {
        $i->amOnPage('/logout');
        $i->seeCurrentUrlEquals('/login');
        $i->see('You have been logged out');
    }
}
<?php
use \AcceptanceTester;

class ExampleCest
{
    public function _before(AcceptanceTester $i)
    {
        $i->loginUser($i);
    }


    public function tryToViewDashboard(AcceptanceTester $i)
    {   
        // User is logged in here 
        $i->amOnPage('/dashboard');
    }

    public function tryOtherExample(AcceptanceTester $i)
    {   
        // User is logged in here 
        $i->amOnPage('/dashboard');
    }

    public function tryMoreInfo(AcceptanceTester $i)
    {   
        // User is logged in here 
        $i->amOnPage('/dashboard');
    }
}