Installing PHPUnit+PEAR in Ubuntu 12.10 and Overcoming the "PHP_CodeCoverage_Filter::getInstance" Fatal Error
PHP was one of the very first languages I learnt on my way to the world of web dev/design and it still is a very strong tool in my Swiss Army Knife for any web based projects.
But to my surprise I got
PHP Fatal error: Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/bin/phpunit on line 39
Bewildered I ran to find what was causing it, but couldn't find any definite solution. So I again fired up my dev virtual box with ubuntu 12.04 and there it was running fine.
Suspecting something was wrong with my PEAR package I went ahead and typed
It showed me (unlike the config on my 12.10)
Configuration (channel pear.php.net):
=====================================
directory
directory
PHP’s ./configure
PHP’s ./configure
maintainers)
System Configuration File Filename /etc/pear/pear.conf
Getting sniff of what was wrong I fixed my environments using the following commands
Note: This happened quite a while ago. I finally got urge to post it because on of my friends faced the exact same problem last night and she couldn't find any solution. When she was telling me today I just figured out just by hearing the error what might be wrong. And the above fixed her issue.
And it dawned to me maybe If I had posted this earlier it could have helped her :P
In recent times however with the advent of various frameworks I started to realize finally my days of painstaking coding is over and I now can finally work on my small-medium sized applications with minimal effort needed for testing.......how wrong I was.
When introduced to the world of testing I started to realize how inefficient and poor my coding standards were also how terrible they were in terms of maintenance. Also the flaws I started to find in my old projects urged me to unit-test my newer ventures. And I found the gem called PHPUnit
There are three ways of installing it in your dev box (Assuming Ubuntu)
- Install Through PEAR
- Install Through Composer
- Install using standalone PHAR file
And as a loyal user of PEAR I straight went to PEAR and just typed the following command which is supposed to install PHPUnit in one go
$ sudo pear install phpunit/PHPUnitSatisfied with the result I went to the terminal again and ran > phpunit
But to my surprise I got
PHP Fatal error: Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/bin/phpunit on line 39
Bewildered I ran to find what was causing it, but couldn't find any definite solution. So I again fired up my dev virtual box with ubuntu 12.04 and there it was running fine.
Suspecting something was wrong with my PEAR package I went ahead and typed
$ pear config-show
It showed me (unlike the config on my 12.10)
Configuration (channel pear.php.net):
=====================================
Auto-discover new Channels auto_discover Default Channel default_channel pear.php.netHTTP Proxy Server Address http_proxy PEAR server [DEPRECATED] master_server pear.php.netDefault Channel Mirror preferred_mirror pear.php.netRemote Configuration File remote_config PEAR executables directory bin_dir /usr/binPEAR documentation directory doc_dir /usr/share/php/docPHP extension directory ext_dir /usr/lib/php5/20090626+lfsPEAR directory php_dir /usr/share/phpPEAR Installer cache directory cache_dir /tmp/pear/cachePEAR configuration file cfg_dir /usr/share/php/cfgdirectory
PEAR data directory data_dir /usr/share/php/dataPEAR Installer download download_dir /build/buildd/php5-5.3.10/pear-build-downloaddirectory
PHP CLI/CGI binary php_bin /usr/bin/phpphp.ini location php_ini --program-prefix passed to php_prefix PHP’s ./configure
--program-suffix passed to php_suffix PHP’s ./configure
PEAR Installer temp directory temp_dir /tmp/pear/tempPEAR test directory test_dir /usr/share/php/testPEAR www files directory www_dir /usr/share/php/htdocsCache TimeToLive cache_ttl 3600Preferred Package State preferred_state stableUnix file mask umask 2Debug Log Level verbose 1PEAR password (for password maintainers)Signature Handling Program sig_bin /usr/bin/gpgSignature Key Directory sig_keydir /etc/pear/pearkeysSignature Key Id sig_keyid Package Signature Type sig_type gpgPEAR username (for username maintainers)
User Configuration File Filename /home/username/.pearrcSystem Configuration File Filename /etc/pear/pear.conf
Getting sniff of what was wrong I fixed my environments using the following commands
And then the followingsudo pear config-set bin_dir /usr/binsudo pear config-set doc_dir /usr/share/php/docsudo pear config-set php_dir /usr/share/phpsudo pear config-set cfg_dir /usr/share/php/cfg(make (sudo mkdir cfg) directory here)sudo pear config-set data_dir /usr/share/php/data
sudi pear config-set test_dir /usr/share/php/test
And after that it ran like a charm.$ sudo pear uninstall phpunit/PHPUnit
$ sudo pear install phpunit/PHPUnit
Note: This happened quite a while ago. I finally got urge to post it because on of my friends faced the exact same problem last night and she couldn't find any solution. When she was telling me today I just figured out just by hearing the error what might be wrong. And the above fixed her issue.
And it dawned to me maybe If I had posted this earlier it could have helped her :P
sudo apt-get install phpunit
ReplyDeleteThat installs it and takes care of any dependencies automatically. Also sets things in the correct path.
No need to over-complicate things.