I\xc2\xb4m 使用 Yii2 和 Codeception 来运行测试。
\n\n当我运行功能测试时,$SERVER['REMOTE_ADDR']未定义。我怎样才能模拟在这些测试中使用的IP。
我已经尝试过$SERVER['REMOTE_ADDR'] = '127.0.0.1',但它不起作用。
我正在尝试使用 codeception 来运行使用 docker 容器开发的 php 网站的测试。我在 Web 容器中创建了一个测试文件夹并将 codecept.phar 放在那里。
这是项目的设置:
docker-compose.yml:
version: '3'
services:
db:
image: mariadb
restart: always
volumes:
- ./db:/var/lib/mysql
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: root
web:
build: .
restart: always
tty: true
volumes:
- ./src:/var/www
- ./build/php.ini:/usr/local/etc/php/php.ini
ports:
- '80:80'
depends_on:
- db
chrome:
image: selenium/standalone-chrome
restart: always
ports:
- '4444:4444'
- '5900:5900'
depends_on:
- web
Run Code Online (Sandbox Code Playgroud)接受.suite.yml
actor: AcceptanceTester
modules:
enabled:
- WebDriver:
url: web
host: chrome
browser: chrome
wait: 15
window_size: false
- \Helper\Acceptance …Run Code Online (Sandbox Code Playgroud)我正在使用我的yml文件的绝对路径...是不是我应该提供路径的正确文件?我已经确认我正在使用的路径是正确的...
$ vendor/bin/codecept generate:cept -config="~/path/to/codeception.yml" acceptance createUser
[Codeception\Exception\Configuration]
Configuration file could not be found
generate:cept [-c|--config[="..."]] suite test
Run Code Online (Sandbox Code Playgroud) 我正在使用Yii2和Codeception.问题是Codeception似乎没有看到数据库转储.为简单起见,我只考虑LoginCept验收测试:
use tests\_pages\LoginPage;
$I = new WebGuy($scenario);
$I->wantTo('ensure that login works');
$loginPage = LoginPage::openBy($I);
$I->see('Login', 'h1');
$I->amGoingTo('try to login with empty credentials');
$loginPage->login('', '');
$I->expectTo('see validations errors');
$I->see('Username cannot be blank.');
$I->see('Password cannot be blank.');
...
Run Code Online (Sandbox Code Playgroud)
所以,当我跑
./vendor/bin/codecept run tests/acceptance/LoginCept.php
Run Code Online (Sandbox Code Playgroud)
一切都运行没有错误:
Acceptance Tests (1) ----------------------------------------
Trying to ensure that login works (LoginCept.php) Ok
-------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
但是只要我添加以下行
echo $I->grabFromDatabase('user', 'name', ['id' => 1]);
Run Code Online (Sandbox Code Playgroud)
测试开始失败:
Acceptance Tests (1) ----------------------------------------
Trying to ensure that login works (LoginCept.php) Error
-------------------------------------------------------------
Time: 2.11 seconds, Memory: 9.75Mb …Run Code Online (Sandbox Code Playgroud) 我想做的事情如下:
$I->setExpectedException('Laracasts\Validation\FormValidationException');
Run Code Online (Sandbox Code Playgroud)
在一个功能性的cept.有机会吗?
\PHPUnit_Framework_TestCase::setExpectedException('Laracasts\Validation\FormValidationException');
Run Code Online (Sandbox Code Playgroud)
上面的代码将单独工作,但如果我运行codecept run,一旦完成预期异常的测试,测试就会卡住.
这是我的设置:
阳明:
class_name: FunctionalTester
modules:
enabled: [Filesystem, Db, FunctionalHelper, Laravel4, Asserts]
Run Code Online (Sandbox Code Playgroud) 我写这篇是因为yii2官方文档仍然不完整,而且代码文档本身引用了yii2官方文档.. :).
我有一些问题:
有人可以解释我如何在yii2基本应用程序中逐步安装和配置代码?
谢谢
亚历山德罗
我想测试文件上传的restful API测试.
我试着跑:
$I->sendPOST($this->endpoint, $postData, ['file' => 'example.jpg']);
Run Code Online (Sandbox Code Playgroud)
我希望它的行为与example.jpg文件输入中的用户发送文件的行为相同,file但它似乎没有这种方式.我越来越:
[PHPUnit_Framework_ExceptionWrapper]上传的文件必须是UploadedFile的数组或实例.
是否可以在代码中使用REST插件上传文件?文档非常有限,很难说如何做到这一点.
我也在使用Postman插件测试API Google Chrome,我可以使用这个插件上传文件而没有问题.
我试图使用codecept在Yii2项目中运行单元测试.并收到下一个错误:
PHP Fatal error: Class 'Yii' not found in /var/www/html/mysite/vendor/codeception/codeception/src/Codeception/Module/Yii2.php on line 77
Run Code Online (Sandbox Code Playgroud)
这是我的unit.suite.yml内容:
# Codeception Test Suite Configuration
# suite for unit (internal) tests.
# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES.
class_name: CodeGuy
modules:
enabled: [CodeHelper, Yii2]
config:
Yii2:
configFile: 'config/web.php'
Run Code Online (Sandbox Code Playgroud)
有谁知道问题是什么?
我试图使用sqlite db进行测试,因为我不想触摸我的实际数据库:
在我的unit.suite.yml文件中:
class_name: UnitTester
modules:
enabled: [Asserts, UnitHelper]
config:
Db:
dsn: 'sqlite:app/tests/_data/testdb.sqlite'
user: ''
password: ''
dump: app/tests/_data/dump.sql
Run Code Online (Sandbox Code Playgroud)
在我的TestCase.php文件中,我有一个函数可以重置和迁移并为db进行种子测试:
Artisan::call('migrate:reset');
Artisan::call('migrate');
Artisan::call('db:seed');
Run Code Online (Sandbox Code Playgroud)
我还将sqlite设置添加到app/config/testing/database.php:
<?php
// Codeception testing environment uses SQLITE
return [
'default' => 'sqlite',
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => 'app/tests/_data/testdb.sqlite',
'prefix' => ''
],
]
];
Run Code Online (Sandbox Code Playgroud)
我可以验证是否正在读取database.php文件,但是某些东西仍然阻止了sqlite的使用,我仍然最终收回了我的REAL数据库(MySQL).如何强制Laravel/Codeception使用我的测试数据库?
在PHP Codeception测试框架中,我希望能够一次运行多个套件。
我可以这样运行它们:
codecept run
Run Code Online (Sandbox Code Playgroud)
或者我可以像这样运行单个套件:
codecept run acceptance
codecept run unit
codecept run browser
Run Code Online (Sandbox Code Playgroud)
但是我希望一次只能运行两个
codecept run acceptance,unit // This is not a thing. How can I do this?
Run Code Online (Sandbox Code Playgroud)