У меня есть метод, который будет вызываться несколько раз в течение одного теста, но только один раз с каждым аргументом. Поэтому я хочу проверить, что метод получает каждый аргумент только один раз. Например, у меня есть функция mkdir, которая вызывается для создания каждого каталога:
Тест
$dirs = [
"$parentDir/$siteName/assets/components",
"$parentDir/$siteName/assets/layouts",
];
// iterate each directory
foreach($dirs as $dir) {
// and verify that mkdir was called with that argument only once
$fileSystemMock->expects($this->once())
->method('mkdir')
->with($this->equalTo($dir));
}
Тестируемый метод
public function createSite($siteName) {
$fileSystem = $this->fileSystem;
$parentDir = $this->parentDir;
$componentsDir = "$parentDir/$siteName/assets/components";
$layoutsDir = "$parentDir/$siteName/assets/layouts";
$mediaDir = "$parentDir/$siteName/content/media";
$sectionsDir = "$parentDir/$siteName/assets/sections";
if (!$fileSystem->exists($componentsDir)) {
$fileSystem->mkdir($componentsDir);
}
if (!$fileSystem->exists($layoutsDir)) {
$fileSystem->mkdir($layoutsDir);
}
Однако, тест не пройден:
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'/path/to/parent/best-widgets/assets/layouts'
+'/path/to/parent/best-widgets/assets/components'
Надеюсь, имеет смысл то, что я пытаюсь. Разве в одном () не учитывается аргумент с ()? Я не знаю, как просто проверить, что метод вызывался один раз с каждым аргументом