Поддельный IP на функциональных тестах Codeception
Я использую Yii2 и Codeception для запуска тестов.
Когда я запускаю функциональный тест, $SERVER['REMOTE_ADDR']
не определено. Как я могу макет IP для использования в этих тестах.
я пытался $SERVER['REMOTE_ADDR'] = '127.0.0.1'
, Но это не работает.
4 ответа
Вчера я столкнулся с такой проблемой и нашел решение! Итак, мое решение связано с фреймворком Yii2, но я думаю, что вы сможете изменить его для своей среды.
- Расширьте свой модуль кодирования (для меня Yii2):
<?php
namespace codeception;
use Codeception\Module\Yii2;
class CustomModule extends Yii2
{
protected function recreateClient()
{
parent::recreateClient();
if ($ip = ($this->config['ip'] ?? null)) {
$this->client->setServerParameter('REMOTE_ADDR', $ip);
}
}
}
- Перейдите в конфигурацию codeception.yaml и установите свой
ip
:
actor: MyTester
modules:
enabled:
- \Helper\E2eCommon
- Asserts
- Mockery
# here
- \codeception\CustomModule:
configFile: 'codeception/_config/config.php'
- REST:
# here
depends: \codeception\CustomModule
part: Json
config:
# and here!
\codeception\CustomModule:
ip: 192.168.1.1 # ip mock here!
extensions:
enabled:
- \ResetYiiContainerExtension
это все! наслаждаться :)
- Найдите 2 файла (если проект построен на основе шаблона yii2-app-basic - удалите из каталога пути
common/
):-
common/config/codeception-local.php
-
environments/dev/common/config/codeception-local.php
-
- Добавьте внутрь массива:
[
...
'on beforeAction' => static function () {
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
},
...
]
Создайте свой функциональный класс Helper в tests/_support (если он не существует):
class FunctionalHelper extends \Codeception\Module {
public function _before(\Codeception\TestInterface $test)
{
$this->getModule('Yii2')->client->defaultServerVars = array_merge(
$this->getModule('Yii2')->client->defaultServerVars,
['REMOTE_ADDR' => '127.0.0.1']
);
}
}
Для версий codecept >=2.4 и <4.0 попробуйте использовать что-то похожее на:
class Helper extends \Codeception\Module
{
/**
* {@inheritdoc}
*/
public function _before(\Codeception\TestInterface $test)
{
$this->getModule('Yii2')->client->setServerParameter('REMOTE_ADDR', '127.0.0.1');
}
}
и не забудьте включить его в *.suite.yml
файл:
modules:
enabled:
- \tests\Helper\Helper