Я пытаюсь добавить собственный вспомогательный метод в набор модульных тестов, но при запуске теста я получаю ошибку Fatal error: Uncaught ArgumentCountError: Too few arguments to function.
Это то, что у меня есть до сих пор
Когда я запускаю тест, я получаю:
ArgumentCountError: Too few arguments to function ExampleTest::__construct(), 0
_support/Помощник/Unit.php:
namespace Helper;
// here you can define custom actions
// all public methods declared in helper class will be available in $I
class Unit extends \Codeception\Module
{
public function get_hello()
{
return 'Hello';
}
}
Метод испытания:
public function testMe1(\UnitTester $I)
{
$hello = $I->get_hello();
$this->assertEquals(2, $hello);
}
# Codeception Test Suite Configuration
#
# Suite for unit (internal) tests.
class_name: UnitTester
modules:
enabled:
- Asserts
- \Helper\Unit
Почему testme1() не принимает никаких аргументов? Какой шаг я пропустил?
@Naktibalda отметил, спасибо. На данный момент я просто пытаюсь выяснить различные способы повторного использования кода в среде Codeception. Я попробовал некоторые действия с другими наборами, которые сработали, с набором модулей я не могу вызвать какие-либо методы, которые я помещаю внутрь помощника.






Методы модульных тестов не передают актера в качестве параметра.
Вы можете вызвать им по $this->tester, как в этот пример
function testSavingUser()
{
$user = new User();
$user->setName('Miles');
$user->setSurname('Davis');
$user->save();
$this->assertEquals('Miles Davis', $user->getFullName());
$this->tester->seeInDatabase('users', ['name' => 'Miles', 'surname' => 'Davis']);
}
Ответ от @Naktibalda верен для интеграционных тестов, а не для модульных тестов.
Единственный способ получить методы модуля в модульных тестах - использовать метод getModule():
public function testSomethink()
{
$this->getModule('Filesystem')->openFile('asd.js');
}
Таким образом, вы также можете загрузить пользовательский модуль.
Если нет, и вы можете повторно использовать некоторый код в модульном тесте, создайте родительский класс для всех ваших модульных тестов. Что-то вроде БазеЮнитТест, которое простирается от Codeception\Test\Unit. И напишите свой многоразовый код в этом классе.
Целью вспомогательных методов является выполнение действий, результат которых, вероятно, игнорируется. Если вы хотите получить некоторые данные, было бы лучше использовать поставщик данных.