Monday, 26 September 2016

php - PHPSpec Catching TypeError in PHP7

Upon further investigation, this is a PHPSpec bug, and has been reported here. The bug hasn't been fixed in several months, so I would suggest commenting on it.




If you look at the code in src/PhpSpec/Matcher/ThrowMatcher.php, you can see that PHPSpec catches Exceptions that inherit 'Exception' and then checks the instance type of that exception. But, TypeError doesn't inherit from Exception, it inherits from Error. The only thing it has in common with an Exception, is that they both implement the Throwable interface.



For example:



101     public function verifyPositive($callable, array $arguments, $exception = null)
102 {
103 try {
104 call_user_func_array($callable, $arguments);
105 } catch (\Exception $e) {
106 if (null === $exception) {

107 return;
108 }
109
110 if (!$e instanceof $exception) {
111 throw new FailureException(sprintf(
112 'Expected exception of class %s, but got %s.',
113 $this->presenter->presentValue($exception),
114 $this->presenter->presentValue($e)
115 ));
116 }



Report the bug, explain these details, and show them this documentation about the inheritance of TypeError.

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...