Vagrant,Codeception和Laravel问题.NotFoundHttpException

due*_*lsy 0 php unit-testing laravel laravel-4 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');
    }

}
Run Code Online (Sandbox Code Playgroud)

最初测试运行正常,但是在添加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
Run Code Online (Sandbox Code Playgroud)

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

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

class_name: WebGuy
modules:
    enabled:
        - PhpBrowser
        - WebHelper
        - Laravel4
    config:
        PhpBrowser:
            url: 'http://localhost:3030/'
Run Code Online (Sandbox Code Playgroud)

我想知道是否有其他人遇到过这个问题,或者对于如何解决这个问题有任何想法,我已经把头发弄了好几个小时.

Lau*_*nce 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']]);
}
Run Code Online (Sandbox Code Playgroud)

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