我正在尝试使用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');
}
}
最初测试运行正常,但是在将Laravel4
添加到acceptance.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
中acceptance.suite.yml
配置的网址,如下所示:
class_name: WebGuy
modules:
enabled:
- PhpBrowser
- WebHelper
- Laravel4
config:
PhpBrowser:
url: 'http://localhost:3030/'
我想知道是否有其他人遇到过这个问题,或者对于如何解决这个问题有任何想法,我已经在这里扯了几个小时。
答案 0 :(得分: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测试更快)。
答案 1 :(得分:3)
您甚至无需更改start.php
。您可以在laravel4模块配置中设置codecption的环境。因此,在acceptance.suite.yml
中,它将如下所示:
modules:
enabled: [PhpBrowser, WebHelper, Laravel4]
config:
Laravel4:
environment : 'codeception'
filters : true
现在,当您在终端中执行php codecept run acceptance
时,Laravel4模块将使用app/config/codeception
中的配置文件。
答案 2 :(得分:0)
无法找到解决方案,所以现在我很遗憾没有Laravel4
模块,遗憾的是。