/** * Before executing an it() spec it should be setup like a test case. * * @param Spec $spec */ public function beforeSpec(Spec $spec) { self::$testCase->setUp(); self::$result->startTest(self::$test); /** @var Closure $closure */ $closure = self::$testCase->getProperty($spec, 'closure'); // This will not be set for incomplete specs. if (!$closure) { return; } $suite = self::$testCase->getProperty($spec, 'suite'); $newSuite = new ProxySuite($spec->getTitle(), $closure, $suite); $reflection = new \ReflectionClass($suite); foreach ($reflection->getProperties() as $property) { $v = self::$testCase->getProperty($suite, $property->getName()); self::$testCase->setProperty($newSuite, $property->getName(), $v); } /** @noinspection PhpUndefinedMethodInspection */ $closure = $closure->bindTo($newSuite); self::$testCase->setProperty($spec, 'closure', $closure); }