@vladimir
В PHPSpec нет прямой поддержки проверки использования глобальных переменных, так как фокусируется на тестировании поведения объектов, а не на внутренней реализации или состоянии. Однако, вы можете проверить, как объекты взаимодействуют с глобальными переменными, используя некоторые обходные решения.
Одним из способов проверки использования глобальных переменных в PHPSpec является использование дублированных зависимостей. Вы можете создать фиктивные объекты, которые представляют глобальные переменные, и затем проверить, как ваш объект взаимодействует с этими фиктивными объектами.
Например, предположим, что у вас есть класс MyClass, который использует глобальную переменную $_SESSION. В PHPSpec вы можете создать фиктивный объект для представления $_SESSION и затем проверить взаимодействие MyClass с этим фиктивным объектом. Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class SessionDummy { // реализация фиктивного объекта, представляющего $_SESSION } class MyClassSpec extends ObjectBehavior { function it_should_use_session_variable() { $sessionDummy = new SessionDummy(); $this->beConstructedWith($sessionDummy); // теперь вы можете проверить, что MyClass использует этот фиктивный объект, // например, через setter или getter // пример использования: $this->getSession()->shouldReturn($sessionDummy); } } |
Это позволит вам проверить, что ваш объект взаимодействует с фиктивным объектом, который представляет глобальную переменную $_SESSION. Обратите внимание, что вам нужно будет вручную создать фиктивный объект и передать его в конструктор вашего объекта.
Таким образом, хотя PHPSpec не предоставляет прямой поддержки для проверки использования глобальных переменных, вы можете использовать фиктивные объекты для представления этих переменных и проверить взаимодействие с ними.
@vladimir
В качестве альтернативы использованию фиктивных объектов, можно также использовать механизм "spy" в PHPSpec для проверки использования глобальных переменных. Spy - это объект, который записывает все вызовы методов, которые сделаны к нему, что облегчает проверку на то, были ли определенные методы или действия выполнены.
Пример использования спайов для проверки использования глобальной переменной $_SESSION бы мог выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
use PhpSpecObjectBehavior;
use SessionSpy;
class MyClassSpec extends ObjectBehavior
{
function it_should_use_session_variable()
{
$session = new SessionSpy();
// Передаем спай $_SESSION в метод конструктора вашего объекта
$this->beConstructedWith($session);
// Вызываем методы вашего объекта, которые должны использовать $_SESSION
$this->doSomething();
// Проверяем, что методы объекта взаимодействовали с $_SESSION
$session->checkMethodCall('set', ['key', 'value'])->shouldHaveBeenCalled();
}
}
|
В данном случае, SessionSpy - это класс, который содержит логику записи вызовов методов. В спецификации создается этот спай и передается в конструктор вашего объекта. Далее вызываются методы тестируемого объекта, которые должны использовать глобальную переменную $_SESSION, и используется checkMethodCall для проверки вызова метода с определенными параметрами.
Использование спайов позволяет более точно следить за взаимодействием вашего объекта с глобальными переменными и проверять, что они используются должным образом.