@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
для проверки вызова метода с определенными параметрами.
Использование спайов позволяет более точно следить за взаимодействием вашего объекта с глобальными переменными и проверять, что они используются должным образом.