HRc*_*Rcc 6 acceptance-testing laravel-4 codeception
我试图在我的Laravel应用程序中运行一些验收测试.虽然功能测试会触发测试环境,但验收测试却没有.它是验收测试的错误还是功能?困扰我的主要问题是,它不是使用(+ populating + cleanup)测试数据库,它只连接到dev数据库(当没有指定其他ENV时使用,例如测试,生产),这个当我多次运行它们时经常会失败.
这是我的配置:
codeception.yml
paths:
tests: app/tests
log: app/tests/_log
data: app/tests/_data
helpers: app/tests/_helpers
settings:
bootstrap: _bootstrap.php
suite_class: \PHPUnit_Framework_TestSuite
colors: true
memory_limit: 1024M
log: true
modules:
config:
Db:
dsn: 'mysql:host=localhost;dbname=testdb'
user: 'root'
password: 'root'
dump: 'app/tests/_data/dump.sql'
populate: true
cleanup: true
Run Code Online (Sandbox Code Playgroud)
acceptance.suite.yml
class_name: WebGuy
modules:
enabled:
- PhpBrowser
- WebHelper
- Db
config:
PhpBrowser:
url: 'http://localhost/'
Run Code Online (Sandbox Code Playgroud)
functional.suite.yml
class_name: TestGuy
modules:
enabled: [Filesystem, TestHelper, Laravel4, Db]
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
"验收"测试不在测试环境中运行.原因是当Laravel处于测试环境中时,它默认禁用过滤器.因此,测试环境仅适用于单元和功能测试.
验收测试应该在另一个环境中运行(例如dev或者Codeception的特定环境).
因为Codeception 2.x现在使用Guzzle来获取页面响应,所以可以检测到您在主机上的时间以及Codeception正在执行特定请求.这样,您就可以拥有一个"测试"环境以及专门用于验收测试的"代码"环境.
如果您正在使用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测试更快).
首先,您必须了解Codeception验收测试不在 Laravel测试环境中运行.相反,它使用Guzzle来发出外部HTTP请求.假设您的验收测试是针对localhost运行的,那么您正在标准开发环境中运行.就像使用浏览器一样.
也就是说,这是我如何使用Codeception Acceptance测试来运行Laravel测试环境.我在Ubuntu上使用LAMP堆栈运行Vagrant.
编辑您的/etc/hosts文件.添加test.localhost到127.0.0.1行.不要删除那里的其他主机.如果您使用WAMP/MAMP /或其他,则可能是类似的设置.
/ etc/hosts文件
127.0.0.1 localhost test.localhost
使用Laravel设置环境处理.下面是bootstrap/start.phplarval根目录文件中的代码.注意'测试'线.
引导/ start.php
$env = $app->detectEnvironment(array(
'local' => array('your-machine-name'),
'testing' => array('test.localhost')
));
Run Code Online (Sandbox Code Playgroud)确保您的代码验收测试配置为访问正确的域/网址.下面的代码来自我自己的API验收测试.注意url:sections有test.localhost.这是Codeception将为测试命中的URL.
应用程序/测试/ acceptance.suite.yml
class_name: ApiGuy
modules:
enabled: [PhpBrowser, REST, ApiHelper, Db, FileSystem]
config:
PhpBrowser:
url: http://test.localhost/
REST:
url: http://test.localhost/api/v1/
Run Code Online (Sandbox Code Playgroud)把它们放在一起
/etc/hosts文件,以便Codeception可以找到test.localhost.编辑Web服务器配置以处理test.localhost超出了本答案的范围.bootstrap/start.php以便它知道进入test.localhost的任何请求都应该在测试环境中运行.acceptance.suite.yml文件,告诉它对http://test.localhost运行所有测试现在,假设上述操作正确完成,您应该能够运行代码验证运行验收并查看测试的输出.
| 归档时间: |
|
| 查看次数: |
3386 次 |
| 最近记录: |