Fatal error running unit test in Yii app - yii

This Question is local to my situation and not resolved (yet). But if you are experiencing this problem, the trouble shooting steps may give you a good path to start on.
I want to run a unit test in a Yii web application on localhost, which is running via WampServer 2.1 on Windows 7.
<?php
class LittleTest extends CTestCase
{
public function testApprove()
{
$value1 = "1";
$this->assertEquals($value1,$value1);
}
}
?>
I receive a fatal error when I try to run the test. Here is how I run it, on the Windows command line:
C:\wamp\www\app\protected\tests>
C:\wamp\www\app\protected\tests>cd unit
C:\wamp\www\app\protected\tests\unit>phpunit LittleTest.php
I receive (along with some stack trace lines):
PHP Fatal error:
class 'CTestCase' not found in [path to file]\LittleTest.php on line 4
Trouble shooting steps to this point:
The app runs. The default index page of the app looks good and I have used the gii tool to create a model class.
From command line, I can see php and phpunit are available (and I've been over my pear install to make sure it's all good):
C:\wamp\www\app\protected\tests>
C:\wamp\www\app\protected\tests>phpunit --version
PHPUnit 3.7.13 by Sebastian Bergmann.
C:\wamp\www\app\protected\tests>
C:\wamp\www\app\protected\tests>php --version
PHP 5.3.5 (cli)
... etc
display_errors is turned on. display_startup_errors is turned on.
I tried renaming the class so that name did not match the document name:
class LittleTestTweak extends CTestCase
I'm not sure of the precise command that runs the test, so I have tried variants like:
php LittleTest.php
Also I've tried running it various places in the folder structure. Here is the immediate structure:
/tests
| bootstrap.php
| my_tree.txt
| phpunit.xml
| WebTestCase.php
|
|---- /fixtures
|---- /functional
| SiteTest.php
|
|---- /report
`---- /unit
LittleTest.php
I also checked my php.ini for the path to PEAR; as far as I can tell, it's correct (but how can I test it?):
include_path=".;C:\wamp\bin\php\php5.3.5\PEAR;C:\wamp\www\app
More Info
In response to this:
cd wamp\www\app\protected\tests
phpunit unit\LittleTest.php
I receive this:
Warning: require_once(PHPUnit/Extensions/SeleniumTestCase.php):
failed to open stream: No such file or directory in
C:\wamp\www\yii\framework\test\CWebTestCase.php on line 12
Call Stack:
0.0007 339624 1. {main}() C:\wamp\bin\php\php5.3.5\phpunit:0
0.0164 698440 2. PHPUnit_TextUI_Command::main()
C:\wamp\bin\php\php5.3.5\phpunit:46
0.0164 698856 3. PHPUnit_TextUI_Command->run()
C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\TextUI\Command.php:129
0.0164 698856 4. PHPUnit_TextUI_Command->handleArguments()
C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\TextUI\Command.php:138
0.0289 1220944 5. PHPUnit_TextUI_Command->handleBootstrap()
C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\TextUI\Command.php:606
0.0300 1233328 6. PHPUnit_Util_Fileloader::checkAndLoad()
C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\TextUI\Command.php:778
0.0330 1233424 7. PHPUnit_Util_Fileloader::load()
C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\Util\Fileloader.php:76
0.0334 1238096 8. include_once
('C:\wamp\www\app\protected\tests\bootstrap.php')
C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\Util\Fileloader.php:92
0.0412 1520256 9. require_once
('C:\wamp\www\app\protected\tests\WebTestCase.php')
C:\wamp\www\app\protected\tests\bootstrap.php:8
0.0413 1520520 10. YiiBase::autoload()
C:\wamp\www\yii\framework\YiiBase.php:0
0.0423 1543904 11.
include('C:\wamp\www\yii\framework\test\CWebTestCase.php')
C:\wamp\www\yii\framework\YiiBase.php:395
Fatal error: require_once(): Failed opening required
'PHPUnit/Extensions/SeleniumTestCase.php'
(include_path='.;C:\wamp\bin\php\php5.3.5\PEAR\pear;C:\wamp\bin\php\php5.3.5\pear')
in C:\wamp\www\yii\framework\test\CWebTestCase.php on line 12
Call Stack:
0.0007 339624 1. {main}() C:\wamp\bin\php\php5.3.5\phpunit:0
0.0164 698440 2. PHPUnit_TextUI_Command::main()
...et cetera...
The failed requirement is PHPUnit/Extensions/SeleniumTestCase.php. I wonder if the issue is that PHPUnit is installed locally under C:\wamp.
I opened my php.ini and added to include_path: C:\wamp\bin\php\php5.3.5\PEAR\PHPUnit\Extensions. Restarted wamp. No change in error reporting.
RESOLUTION
My security setup uses DansGuardian and I had neglected to loosen the settings for banned extension types, which blocks file downloads. In fact I don't care to ban any types, and modifying that file allows everything to work. Woops, that's my Linux set. PHPUnit is working there, and it is working on WAMP also. Recreating the steps on WAMP is impossible; but I do know I had to open cmd.exe as administrator and pear update-channels, pear upgrade-all, etc. I also had to clear pear's cache at one point, and I had to overcome an issue with curl recognition to install Selenium:
pear install --force phpunit/PHPUnit_Selenium

To run unit tests in Yii with phpunit, you'll need to let phpunit load the protected/tests/bootstrap.php file which basically sets up a configuration, and autoloads the required classes (mainly pertaining to testing). The bootstrap.php file loads yiit.php which actually autoloads the required classes.
Now we can load all this configuration either by command line options when running phpunit, or let the configuration be read automatically through the protected/tests/phpunit.xml file.
For the latter method, the directory from where phpunit is invoked should have the phpunit.xml file in it, and in Yii default webapp, this directory is protected/tests. Therefore you need to do the following to run your tests:
cd wamp\www\app\protected\tests
phpunit unit\LittleTest.php

Related

PHP Fatal error: Interface 'PHPUnit\Framework\TestListener' not found

I'm working on a CakePHP 3.x project on a Vagrant VM. My project has a single Test for a Controller. Project was setup using composer and phpunit is installed in vendor directory.
Running ./vendor/bin/phpunit Tests throws the following error:
[vagrant#devenv-lamp ~/www]$ ./vendor/bin/phpunit Tests
PHP Fatal error: Interface 'PHPUnit\Framework\TestListener' not found in /vagrant/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php on line 30
Fatal error: Interface 'PHPUnit\Framework\TestListener' not found in /vagrant/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php on line 30
I tried running PHPUnit for a single Controller as well - with the same results...
[vagrant#devenv-lamp ~/www]$ ./vendor/bin/phpunit tests/TestCase/Controller/QuestionsControllerTest.php
PHP Fatal error: Interface 'PHPUnit\Framework\TestListener' not found in /vagrant/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php on line 30
Fatal error: Interface 'PHPUnit\Framework\TestListener' not found in /vagrant/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php on line 30
I'm very new to PHPUnit and am running into a wall even without taking off the ground. Any help here will be greatly appreciated.
It looks like autoloading is not set up correctly.
In your phpunit.xml you need to specify a bootstrap file. This can either be a custom script based on your project or in some cases it's as easy as using composer's autoload.php:
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/3.7/phpunit.xsd"
bootstrap="vendor/autoload.php"
>
...
</phpunit>

running dart project says dart:html is not available for the standalone vm

I used Git to pull a project
I then start IntelliJ, and say: Open Project.
The project itself looks like it has 4 modules, Lab1, Lab2, Solution2, Solution2
I open the full project. In Lab1, i want to run to see how my web page looks, but when i say: Run main.dart the error kicked back is:
C:\code\dart-sdk\bin\dart.exe --ignore-unrecognized-flags --checked --enable-vm-service:51293 --trace_service_pause_events C:\code\workspace\tw_remoting_training\codelab_01\web\main.dart
Observatory listening on http://127.0.0.1:51293
The built-in library 'dart:html' is not available on the stand-alone VM.
'package:remoting_training/remoting_printer.dart': error: line 20 pos 1: library handler failed
import 'dart:html';
^
Process finished with exit code 254
Im not sure what is going on here though. As a secondary option, i will also try to Right-Click on index.html and click: Open with > Dartium but that shows a blank page. It shouldve done 4 async calls which printed strings to the screen.
Is there something I am missing? Is it not running because of it being a module in a project?
If your Dart script imports dart:html or a library that imports dart:html you can run that script only from the Dartium browser (by adding a script tag to HTML that points the that Dart script, or if you run it through pub build or dart2js in any browser), but it can't be run from the console.
With dart:io it's exactly the opposite, it can't be run in the browser.

Where comes this Fatal error from? cakephp phpunit

I created a cakephp3 project with composer.
composer create-project --prefer-dist cakephp/app foobar
Then, I baked a helper with
bin/cake bake helper Progress
And copypasted the helper-example in the cakephp testing tutorial
Switching in the directory and performing phpunit says
PHP Fatal error: Class Cake\TestSuite\Fixture\FixtureInjector contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (PHPUnit_Framework_TestListener::addWarning) in /home/matthias/www/isbn.localhost/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php on line 173
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:42
PHP 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:138
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:186
PHP 5. PHPUnit_TextUI_TestRunner->handleConfiguration() /home/matthias/www/foobar/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:145
PHP 6. require_once() /home/matthias/www/foobar/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:771
Fatal error: Class Cake\TestSuite\Fixture\FixtureInjector contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (PHPUnit_Framework_TestListener::addWarning) in /home/matthias/www/foobar/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php on line 173
Call Stack:
0.0001 225152 1. {main}() /usr/bin/phpunit:0
0.0031 515440 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:42
0.0031 516064 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:138
0.6384 6931096 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:186
0.6384 6932312 5. PHPUnit_TextUI_TestRunner->handleConfiguration() /home/matthias/www/foobar/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:145
0.6458 7043088 6. require_once('/home/matthias/www/foobar/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php') /home/matthias/www/foobar/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:771
Doesn't matter if the global installed phpunit 4.2.6 or the latest version, installed with composer, is used. Where comes this from and how to can I fix this?
Thanks a lot!
Do not use a global PHPUnit installation when you have one that is local to your CakePHP installation, as you can see this will conflict, look at the stacktrace, you're starting in /usr/bin/phpunit, and then it jumps into /home/matthias/www/foobar/vendor/phpunit/phpunit/....
That being said, you seem to have installed the "wrong" PHPUnit version in your CakePHP app, the mentioned method addWarning was introduced with PHPUnit 5.1 alpha! The whole 5.x branch is not yet stable, and CakePHP is not yet compatible to it was just recently updated (not yet released) to support the changes, so for now you should install the stable 4.x branch instead, like
$ composer require --dev phpunit/phpunit:~4.0
Unfortunately the prefer-stable option (which is by default set to true in the CakePHP app skeletons composer.json) doesn't seem to help here, as Composer will choose ~5.1#dev when not specifying a version on your own (even if it's just *).

yii2-advanced-template and phpStorm tests

Question: How do I setup codecetion tests in phpStorm 9 for the yii2-advanced-template?
Codeception is setup properly and when I go to the /tests/ folder and run codecept run then everything works perfectly fine, and all tests are executed.
But I can't get it to run in phpStom:
Under Settings->Language and Frameworks->PHP->PHPUnit I have set:
.) custom autoloader pointing to the autoload.php under vendor
.) no default config
.) no bootstrap file
And in Run/Debug Configuration I have used the Dictionary option with the /tests/ folder.
When I execute this with the Debug button I get:
/Applications/XAMPP/bin/php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 /private/var/folders/lz/s7xjwdbx6bxdxhmzr31c26580000gn/T/ide-phpunit.php --no-configuration /path/to/root/tests/
Testing started at 19:41 ...
Fatal error: Class 'tests\codeception\common\algorithm\DbTestCase' not found in /path/to/root/tests/codeception/common/algorithm/ObjectTest.php on line 23
Call Stack:
0.1083 357832 1. {main}() /private/var/folders/lz/s7xjwdbx6bxdxhmzr31c26580000gn/T/ide-phpunit.php:0
0.1313 983624 2. IDE_Base_PHPUnit_TextUI_Command::main(???) /private/var/folders/lz/s7xjwdbx6bxdxhmzr31c26580000gn/T/ide-phpunit.php:552
0.1313 989640 3. PHPUnit_TextUI_Command->run(???, ???) /private/var/folders/lz/s7xjwdbx6bxdxhmzr31c26580000gn/T/ide-phpunit.php:294
0.1372 1233680 4. PHPUnit_Runner_BaseTestRunner->getTest(???, ???) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/TextUI/Command.php:146
0.1827 1430624 5. PHPUnit_Framework_TestSuite->addTestFiles(???) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Runner/BaseTestRunner.php:96
0.1827 1431896 6. PHPUnit_Framework_TestSuite->addTestFile(???, ???) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Framework/TestSuite.php:419
0.1844 1527936 7. PHPUnit_Util_Fileloader::checkAndLoad(???) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Framework/TestSuite.php:358
0.1845 1528152 8. PHPUnit_Util_Fileloader::load(???) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Util/Fileloader.php:79
0.1861 1710880 9. include_once('/Users/jareiter/Tabbie2/tabbie2.git/tests/codeception/common/algorithm/StrictWUDCRulesTest.php') /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Util/Fileloader.php:95
PHP Fatal error: Class 'tests\codeception\common\algorithm\DbTestCase' not found in /Users/jareiter/Tabbie2/tabbie2.git/tests/codeception/common/algorithm/StrictWUDCRulesTest.php on line 23
PHP Stack trace:
PHP 1. {main}() /private/var/folders/lz/s7xjwdbx6bxdxhmzr31c26580000gn/T/ide-phpunit.php:0
PHP 2. IDE_Base_PHPUnit_TextUI_Command::main($exit = *uninitialized*) /private/var/folders/lz/s7xjwdbx6bxdxhmzr31c26580000gn/T/ide-phpunit.php:552
PHP 3. PHPUnit_TextUI_Command->run($argv = *uninitialized*, $exit = *uninitialized*) /private/var/folders/lz/s7xjwdbx6bxdxhmzr31c26580000gn/T/ide-phpunit.php:294
PHP 4. PHPUnit_Runner_BaseTestRunner->getTest($suiteClassName = *uninitialized*, $suiteClassFile = *uninitialized*) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/TextUI/Command.php:146
PHP 5. PHPUnit_Framework_TestSuite->addTestFiles($filenames = *uninitialized*) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Runner/BaseTestRunner.php:96
PHP 6. PHPUnit_Framework_TestSuite->addTestFile($filename = *uninitialized*, $phptOptions = *uninitialized*) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Framework/TestSuite.php:419
PHP 7. PHPUnit_Util_Fileloader::checkAndLoad($filename = *uninitialized*) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Framework/TestSuite.php:358
PHP 8. PHPUnit_Util_Fileloader::load($filename = *uninitialized*) /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Util/Fileloader.php:79
PHP 9. include_once() /Applications/XAMPP/xamppfiles/lib/php/PHPUnit/Util/Fileloader.php:95
Process finished with exit code 255
All files in the log exist!
Codeception framework is not currently supported by Testing subsystem of PhpStorm.
https://youtrack.jetbrains.com/issue/WI-16350 -- watch this ticket (star/vote/comment) to get notified on progress.
You are trying to use PHPUnit integration to run your Codeception tests ... but that will not work like that because IDE uses intermediate helper script that works with PHPUnit directly. As you can see autoloader does not seem to help here...

Fatal error: Cannot redeclare class WebTestCase in C:\wamp\www\testapp\protected\tests\WebTest ase.php on line 17

i am using phpunit with selenium in yii to test default created testing cases.
when i am trying to run SiteTest.php file from tests folder then its giving error like
Fatal error: Cannot redeclare class WebTestCase in C:\wamp\www\testapp\protected\tests\WebTest ase.php on line 17
and when i am trying to run from functional folder then its showing CWebTestCase not defined
i am running this command from command line
protected\test>phpunit functional/SiteTest.php
system configuration
window 7 64 bit
phpunit is installed
selenium is installed
pear is installed
latest version of all with latest version of yii as well. please help me asap.
regards
anil