0

我正在尝试使用codeception进行验收测试。

我的一项测试有以下内容:

<?php
use Codeception\Util\Stub;

class SomeTest extends \Codeception\TestCase\Test
{

    protected $webGuy;

    /**
     * @test
     */
    public function incorrect_login_should_redirect_back()
    {
        $I = $this->webGuy;
        $I->wantTo('fail at logging in');
        $I->amOnPage('/'); // <-- This is the line that is failing
        $I->fillField('email','info@tntstudio.hr');
        $I->fillField('password','pass');
        $I->click('Login');
        $I->see('email', 'input');
        $I->seeCurrentUrlEquals('/login');
    }

}

最初测试运行正常,但是在添加Laravel4acceptance.suite.yml文件并运行build之后,测试现在失败并显示以下内容:

1) SomeTest::incorrect_login_should_redirect_back
Symfony\Component\HttpKernel\Exception\NotFoundHttpException: 

#1  /Applications/MAMP/htdocs/hired/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1021
#2  /Applications/MAMP/htdocs/hired/vendor/laravel/framework/src/Illuminate/Routing/Router.php:989
#3  /Applications/MAMP/htdocs/hired/vendor/laravel/framework/src/Illuminate/Routing/Router.php:968
#4  /Applications/MAMP/htdocs/hired/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:738
#5  /Applications/MAMP/htdocs/hired/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:708
#6  /Applications/MAMP/htdocs/hired/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php:81
#7  /Applications/MAMP/htdocs/hired/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php:325
#8  /Applications/MAMP/htdocs/hired/app/tests/acceptance/WebGuy.php:476
#9  /Applications/MAMP/htdocs/hired/app/tests/acceptance/SomeTest.php:16

我正在使用 vagrant 在虚拟环境中运行我的应用程序,在http://localhost:3030/

我已将其设置为PhpBrowser配置的 url,acceptance.suite.yml如下所示:

class_name: WebGuy
modules:
    enabled:
        - PhpBrowser
        - WebHelper
        - Laravel4
    config:
        PhpBrowser:
            url: 'http://localhost:3030/'

我想知道是否有其他人遇到过这个问题,或者对如何解决这个问题有任何想法,我已经为此扯了几个小时的头发。

4

3 回答 3

5

Laravel4 模块将导致 Codeception 使用 Laravel 中的“测试”环境。

Laravel 将禁用“测试”环境中的所有路由过滤器 - 因此您的过滤器无法正常工作,并且可能调用错误的路由,导致您的应用程序死机并且您的测试失败。

我不认为将 Laravel4 模块与“验收”测试一起使用是正确的——它应该只用于功能测试?编辑:我刚刚发现 Codeception Laravel4 模块文档实际上说“这个模块允许你为 Laravel 4 运行功能测试”——所以我猜它实际上并不是为验收测试而设计的?

但是随着 Codeception 2.x 的所有变化——你最好使用 PhpBrowser 模块进行验收测试,使用 Laravel4 模块进行功能测试。

如果您使用的是 Homestead,我会在我的start.php文件中执行此操作以检测 Codeception 是否正在运行,并专门将其放入“codeception”环境中,否则我让它正常运行我的环境检测

if ((gethostname() === 'homestead') && (isset($_SERVER['REMOTE_ADDR'])) && ($_SERVER['REMOTE_ADDR'] === '127.0.0.1'))
{
    $env = $app->detectEnvironment(['codeception' => ['homestead']]);
}
else
{
    $env = $app->detectEnvironment(['dev' => ['homestead']]);
}

然后在我的“codeception”环境中,我设置了一个 SQLite 文件数据库,并针对它运行验收测试(这比 mySQL 测试更快)。

于 2014-06-07T11:52:44.257 回答
3

您甚至不必更改您的start.php. 您可以在 laravel4 模块配置中设置编解码器的环境。所以在你的acceptance.suite.yml它看起来像这样:

modules: enabled: [PhpBrowser, WebHelper, Laravel4] config: Laravel4: environment : 'codeception' filters : true

现在,当您php codecept run acceptance在终端中执行时,Laravel4 模块将使用来自app/config/codeception.

于 2014-08-21T08:06:25.340 回答
0

无法找到解决此问题的方法,因此Laravel4遗憾的是,现在我将不使用该模块。

于 2014-03-09T02:26:12.543 回答